![](https://i-blog.csdnimg.cn/blog_migrate/9af364d038805b8ea1bf4894954f3ba6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/259b345c3ecdfc6514d26e4033f8acf6.gif)
我们在进行有些反爬虫的网站的时候往往服务器会对我们非浏览器的访问进行拒绝,主要 通过查看我们的访问工具的方式进行判断的,下面我们就针对这些反爬虫网站进行破解。
问题原因及解决方法
产生这样的问题主要是因为我们在访问的时候服务器能够得到我们使用什么方式访问的,所以节约办法就是更改我们的访问类型,加入如下代码:
use = {'User-Agent': 'Mozilla/5.0'} #这里的Mozilla/5.0是浏览器的总称,可以骗过服务器
r = requests.get(url,headers = use) #此行代码的意思是将use加入到网页头中,这样就会给服务器一个假象
具体原因请看下面的分析,你会更好的理解这两行代码
查找出现问题的原因
首先引出我们的问题,今天我们爬取的网页亚马逊主页首先我们使用以下代码进行爬取试试:
# -*- coding:utf-8 -*-
# -Author-= JamesBen
# Email: 1597757775@qq.com
import requests
url = "https://www.amazon.cn/"
r = requests.get(url)
print(r.text)
用上面的代码运行发现代码运行失败了,我们查看网页的编码方式可以发现网页运用的是:utf-8
我们将r.encoding
改成utf-8
,具体代码改成如下:
# -*- coding:utf-8 -*-
# -Author-= JamesBen
# Email: 1597757775@qq.com
import requests
url = "https://www.amazon.cn/"
r = requests.get(url)
r.encoding = r.apparent_encoding
print(r.text)
即使使用以上代码发现还是无法进入,我们查找原因得到如下提示:
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
从以上代码中我们可以很清晰的发现这里居然告诉服务器我们的访问使用:python-requests/2.22.0
这样服务器就可以通过这样的判断来拒绝我们爬虫程序的访问
解决办法
上面我们已经查到问题所在,下面我们就针对这样的问题进行解决吧,首先我们在上篇文章中学过requests库有一种可以修改代码的命令大家还记得吗? 没错就是通过在get时加入参数进行修改,代码如下:
# -*- coding:utf-8 -*-
# -Author-= JamesBen
# Email: 1597757775@qq.com
import requests
url = "https://www.amazon.cn/"
use = {'User-Agent': 'Mozilla/5.0'}
r = requests.get(url,headers = use)
r.encoding = r.apparent_encoding
print(r.request.headers)
运行代码我们发现这里的User-Agent
已经被改变,返回信息具体如下:
{'User-Agent': 'Mozilla/5.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
这样我们就成功的骗过了服务器。
以上就是解决方法以及问题原因的主要内容,希望对你的学习有所帮助。
整合代码框架
# -*- coding:utf-8 -*-
# -Author-= JamesBen
# Email: 1597757775@qq.com
import requests
def get_HTMLText(url):
try :
use = {'User-Agent': 'Mozilla/5.0'} #
r = requests.get(url, timeout = 30,headers = use)
r.raise_for_status() #如果状态不是200引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except :
return "产生异常"
if __name__ == "__main__":
url = "https://www.amazon.cn/"
print(get_HTMLText(url))
感谢你的阅读,如果对于你的学习有用你可以持续关注我们的零基础系统学习Python爬虫系列
提示学习来源:北京理工大学慕课