最近在做爬虫项目遇到一个问题,这里简单的描述下让大家帮忙看下。目标网站需要完成一一系列登录操作,经过抓包测试只需要使用简单的post请求后收到的回包中包含cookie信息,因此可以据此完成登录。程序设计思路为发送求到登录验证页面,获取返回包包头中的cookie然后以此cookie再完成其他请求。
然而问题是在开发测试的时候却始终获取不到返回包包头中的cookie信息。header中始终为空。查阅python中的requests库的手册后发现,导致这个问题的原因主要是requests包在处理请求时,当遇到302状态时,会自动跳转到对应的页面。,然后我在scrapy的setting里面加上了
HTTPERROR_ALLOWED_CODES = [302]
然后就变成了这样:
2023-2-13 13:42:09 [scrapy.core.engine] DEBUG: Crawled (302) <GET https://m.baidu.com/s?word=%e7%b2%a4%e8%af%ad+%e4%b8%8b%e8%bd%bd&pn=90> (referer: https://m.baidu.com/s?word=%e7%b2%a4%e8%af%ad+%e4%b8%8b%e8%bd%bd&pn=90)
但是这样爬到的是没有数据的,这里我有也尝试过换IP去解决,并且在网上寻找了评价比较好,靠谱的亿牛云代理,程序也加了代理并运行了,代码如下:
#! -*- encoding:utf-8 -*-标签:http,url,302,cookie,https,跳转,requests,页面 From: https://blog.51cto.com/u_13789715/6057302
import requests
import random
# 要访问的目标页面
targetUrl = "http://httpbin.org/ip"
# 要访问的目标HTTPS页面
# targetUrl = "https://httpbin.org/ip"
# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"
# 代理验证信息
proxyUser = "username"
proxyPass = "password"
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
# 设置 http和https访问都是用HTTP代理
proxies = {
"http" : proxyMeta,
"https" : proxyMeta,
}
# 设置IP切换头
tunnel = random.randint(1,10000)
headers = {"Proxy-Tunnel": str(tunnel)}
resp = requests.get(targetUrl, proxies=proxies, headers=headers)
print resp.status_code
print resp.text