模拟客户端
有些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置,当我们请求时会报418错误,这是因为你爬的网站做了反爬虫设置
urllib.error.HTTPError: HTTP Error 418
而我们又想进行爬取
可以设置一些Headers信息(User-Agent),模拟成浏览器去访问这些网站
使用urllib,你要创建一个Request对象,用于添加你的headers,如下:
import urllib.request
url='http://www.baidu.com'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
request=urllib.request.Request(url,headers=headers)
data=urllib.request.urlopen(request)
当然,一个固定的User-Agent持续的发请求会被锁定,所以我们要用动态的User-Agent,定义一个User-Agent池,定义一个方案来随机获取一个agent(最好把这一部分单独写一个.py文件,通过import导入使用):
import urllib.request
import random
#创建一个agent池
agentPools=[
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0"
]
#随机获取一个agent
def get_UserAgent():
return agentPools[random.randint(0,2)]
url='http://www.baidu.com'
headers={'User-Agent':get_UserAgent}
request=urllib.request.Request(url,headers=headers)
data=urllib.request.urlopen(request)
补充(关于如何查看游览器的代理信息User-Agent)
方式一:浏览器输入:about:version
方式二:访问http://httpbin.org/get
User-Agent大全
https://blog.csdn.net/jamesaonier/article/details/89003053
注意:即使这么做了,有可能还是会报错,可以更换User-Agent不断尝试,如果所有User-Agent的都行不通,那么这个网站的反爬是经过特殊处理的,我说的这一套方法是解决不了的。