1信息校验型反爬虫之User-Agent

测试网址
爬取页面范围:首页
爬取信息:标题、正文、时间
F12刷新查看请求类型:get请求且没有传递参数
编写请求

import requests
# from parsel

url = 'http://www.porters.vip/verify/uas/index.html'
response = requests.get(url=url)
# 403服务器已收到请求但是拒绝执行
# 404相应资源不存在
# 200服务器已经成功处理了请求
print(response.status_code)
print("-"*20)
print(response.text)

输出结果

403
--------------------
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.19.4</center>
</body>
</html>

打印了403状态码,说明服务器已收到请求但是拒绝执行,遇到了反爬虫,
浏览器和测试工具都可以正常访问,偏偏爬虫程序不可以,肯定是遇到反爬虫了。但它究竟是如何识别爬虫的呢? 3种不同的客户端向服务器端发起请求,其中两种能够得到正常的响应,Python 代码却不能,并且是在第一次请求的时候就被拒绝了,说明在第一次访问时就被识别了。3种不同的客户端,意味着可能有3种不同的客户端身份标识,而在HTTP中只有User-Agent是最接近身份标识这个答案的。我们不妨尝试一下, 在爬虫程序中使用浏览器或者Postman 的身份标识。Requests 库允许使用自定义的请求头信息,我们将刚才的代码改为:
浏览器请求头

import requests
from lxml import etree
# 支持正则、css、xpath,不支持BS4
import parsel


url = 'http://www.porters.vip/verify/uas/index.html'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
# response类型=<class 'requests.models.Response'>
response = requests.get(url=url, headers=headers)
response_text = response.text
response_html = etree.HTML(response_text)

print(response.status_code)

result_titles = response_html.xpath("//div[@class='media']/div/h4/a/text()")
result_bodys = response_html.xpath("//div[@class='media']/div/p[1]/text()")
result_times = response_html.xpath("//div[@class='media']/div/p[2]/text()")
print(result_titles)
print(result_bodys)
print(result_times)

输出结果

200
['中牟县晨阳路学校:中牟县小学...', '...省略']
['3月7日上午,中牟县201...' , '...省略']
['2019-03-08 20:42:37', '2019-03-0...', '...省略']

Postman请求头

# 修改的部分
headers = {
    'user-agent': 'PostmanRuntime/7.26.8'
}

输出结果

200
['中牟县晨阳路学校:中牟县小学...', '...省略']
['3月7日上午,中牟县201...' , '...省略']
['2019-03-08 20:42:37', '2019-03-0...', '...省略']

成功反反爬虫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值