通过headers字段进行反爬
1.通过user-agent进行反爬
User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计。
解决办法:我们可以在浏览器的开发者选项中找到这个参数,并且把这个参数的值放到get请求中的headers字典中即可。
2.通过referer进行反爬
HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。Referrer的正确英语拼法是referrer。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。 一般针对图片,视频较多的网站,服务端会检测referrer字段,若检查出你的referrer字段非正常字段,服务端便会发送假的资源给你。
解决办法:我们可以模仿上一个users-agent字段,在headers中添加这个字段的值。
3.通过cookie进行反爬
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
解决办法:
(1)可以在headers中加上cookies字段
def getcookies():
import requests
url ='https://xueqiu.com'
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
}
response = requests.get(url,headers=headers)
cookie=response.cookies.get_dict()
if response.status_code==200:
return cookie
(2)可以使用requests中的session
import requests
def _get_headers():
s = requests.Session()
url ="https://journals.sagepub.com/loi/bio?year=2014"
res = s.get(url)
return res.request.headers
(3)可以利用cookie池
通过ip地址进行反爬
对于某些网站,在测试的时候请求几次,能获得正确的内容,一旦大规模爬取的话,网站可能会弹出验证码,或者跳转到登陆界面,最严重的直接封锁ip地址。
解决办法使用代理:
像快代理,讯代理这样的一些ip代理网站中有一些免费的代理可以用。
具体的设置方法:
import requests
proxies = {
"http":"http://10.10.1.10:3128"
}
s = requests.get(URL,proxies = proxies)