4回答

0收藏

无法使用代理爬取小红书?

问答交流 问答交流 3583 人阅读 | 4 人回复 | 2020-07-04


我写了一份简单的代码, 就是获取阿布云代理爬取小红书 用户信息, 线下运行没有任何问题, 一到线上运行就跳到验证码界面。  是识别出我来了吗
import random

import requests


def get_proxy():
    '''    阿布云代理    :return:    '''    # 代理服务器    proxyHost = "http-dyn.abuyun.com"    proxyPort = "9020"    # 代理隧道验证信息    proxyUser = "H63P6Q2767KTV67D"    proxyPass = "300848F636931D6C"    proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
        "host": proxyHost,        "port": proxyPort,        "user": proxyUser,        "pass": proxyPass,    }
    # TODO 在本地:只开启http 成功率很高,开启https不行    在线上:  必须都得开启    proxies = {
        "http": proxyMeta,        "https": proxyMeta,    }
    return proxies


#def test_ip(ip):
    targetUrl = "http://test.abuyun.com"    resp = requests.get(targetUrl, proxies=ip)

    print(resp.status_code)
    print(resp.text)


def xhs(url):
    '''    请求小红书    url: 链接    :return:    '''    # 1 获取代理    proxy = get_proxy()


    # 2 检查ip是否使用成功    test_ip(proxy)

    # 获取cookies    cookies = [
        'xhs_spid.5dde=bee4cc51ff7e8557.1593854724.1.1593854726.1593854724.0de66418-0032-4348-84b2-e5849c2916d6;xhs_spses.5dde=*;extra_exp_ids=gif_exp1,ques_exp2;xhsTrackerId=5c84dd26-dc05-4559-c5e0-58cba0784ad6;',        'xhs_spid.5dde=46cdc53071779122.1593854731.1.1593854733.1593854731.07ef5a12-5451-46cf-b238-97ffe2fdb362;xhs_spses.5dde=*;extra_exp_ids=gif_exp1,ques_exp2;xhsTrackerId=616890c7-2489-4365-c3b4-c9ee72acdeef;',        'xhs_spid.5dde=65ae8e45f80da415.1593854736.1.1593854737.1593854736.1529eda5-5b7c-4f8b-acf5-c5876f6db2d0;xhs_spses.5dde=*;extra_exp_ids=gif_clt1,ques_exp2;xhsTrackerId=df79d289-011e-4449-c475-5ce4f5e77a07;',        'xhs_spid.5dde=dfd8fdf8d3ae589e.1593854742.1.1593854743.1593854742.2f907726-4b83-4a64-b8ac-1f955979965b;xhs_spses.5dde=*;extra_exp_ids=gif_exp1,ques_exp1;xhsTrackerId=e65d3152-1b59-4ddd-cdc1-82fc362cdb0f;',        'xhs_spid.5dde=e8813cb104e1f782.1593854747.1.1593854749.1593854747.c1d88f25-1969-4194-8d61-4bb761cc23f0;xhs_spses.5dde=*;extra_exp_ids=gif_exp1,ques_exp1;xhsTrackerId=7f4dd7aa-2d01-416e-c15a-4c5eddeccb23;',        'xhs_spid.5dde=7116d196cc3e649c.1593854753.1.1593854753.1593854753.2ebaef22-a81e-42fd-965c-8fb50f8c9ce9;xhs_spses.5dde=*;extra_exp_ids=gif_exp1,ques_clt2;xhsTrackerId=7213f869-5760-44df-c417-ff32ed132e89;',        'xhs_spid.5dde=de46efcb759f1213.1593854758.1.1593854759.1593854758.39a8f9d3-caaa-45c4-8d32-23ebacfee645;xhs_spses.5dde=*;extra_exp_ids=gif_clt1,ques_exp2;xhsTrackerId=78fc5570-7249-497d-c98d-bbc6a9bc3622;',        'xhs_spid.5dde=4c571149900017f1.1593854764.1.1593854765.1593854764.9eb0bd3f-cad1-4327-80e4-dc497e10ad81;xhs_spses.5dde=*;extra_exp_ids=gif_exp1,ques_clt2;xhsTrackerId=5e323953-013f-498a-c98f-69b109aa6f72;',        'xhs_spid.5dde=3f386e05d3e3ba43.1593854769.1.1593854771.1593854769.b1e212af-9435-4905-bd9a-9b0cffc78f4b;xhs_spses.5dde=*;extra_exp_ids=gif_exp1,ques_exp1;xhsTrackerId=2cae76b5-e03b-4af8-ca3f-f95650901f6f;',        'xhs_spid.5dde=e55e726379eb3dcd.1593854775.1.1593854776.1593854775.f4fad517-852a-4aaf-9341-2723d99dfb34;xhs_spses.5dde=*;extra_exp_ids=gif_clt1,ques_clt2;xhsTrackerId=6fec7580-6d26-4d72-cdf9-ca7dc26a0d3c;']

    # 2 获取小红书    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',        'accept-encoding': 'gzip, deflate, br',        'accept-language': 'zh-CN,zh;q=0.9',        'sec-fetch-dest': 'document',        'sec-fetch-mode': 'navigate',        'sec-fetch-site': 'none',        'upgrade-insecure-requests': '1',        # 'cookie': random.choice(cookies),        'cookie': 'xhsTrackerId=cb9c888c-45d2-4907-c978-e2f0e713494a; extra_exp_ids=gif_clt1,ques_exp2; xhs_spses.5dde=*; xhs_spid.5dde=d9021ee8fc085cae.1593857472.1.1593857799.1593857472.7885fe5f-c4d9-4620-a5df-7d96f4317aa4'    }

    response = requests.get(url, headers=headers, proxies=proxy, timeout=10, verify=False)

    print('请求状态码:', response.status_code)
    print('请求链接:', response.url)
    print('请求结果:', response.content.decode())
    response.close()


url = 'https://www.xiaohongshu.com/user/profile/5d88e9690000000001009039'
xhs(url)
试验了一下  跟cookies无关

求解,   我改怎么办才能

在线上运行这份代码
分享到:
回复

使用道具 举报

回答|共 4 个

yikuhasaki

发表于 2020-7-6 11:50:01 | 显示全部楼层

IP的原因
回复

使用道具 举报

loco

发表于 2020-7-7 10:58:55 | 显示全部楼层

“在本地:只开启http 成功率很高,开启https不行    在线上:  必须都得开启”
看到这行注释就知道是怎么回事了...你请求的url是https的,然后你在本地设置代理的时候只设置了http,由于http!=https,所以你本地跑的时候压根就没有用代理...你以为只开启http(代理)的成功率很高,实际只是因为你一直用的是自己本机的IP,而不是代理IP。
这个问题本质上是因为你用的代理IP的IP质量不高,或是你的cookie本身与IP会有关联关系,用了代理IP当然爆炸了。
回复

使用道具 举报

bella

发表于 2020-7-10 18:44:05 | 显示全部楼层

买个vps 请求把
回复

使用道具 举报

山那边的瘦子

发表于 2020-10-22 15:14:14 | 显示全部楼层

搭建拨号代理就好
回复

使用道具 举报