爬虫与反爬虫
- 爬虫:自动获取网站数据的程序
- 反爬虫:使用技术手段防止爬虫程序爬取数据
反扒机制1
- 判断用户是否是浏览器访问
- urllib.request.urlopen(url)方法采用的是直接通过代码,而不是浏览器访问页面,那么反爬虫机制很容易识别,从而禁止爬虫爬取。
应对办法
- 爬虫加上第一层伪装,伪装成浏览器对网站进行爬取。
- request.Request(url,headers=header)创建自定义请求对象,这里需要注意的是,header构造的User-Agent是一个字典形式的结构。
- 这里用到user-agent 请求头信息,请求头user-agent打开一个网页,按F12,点击network 或者网络(浏览器不一样,名称略有区别),可以看到Request Headers中User-Agent数据,将这个数据传入请求中,达到模拟浏览器的目的,同样的User-Agent可以在网上搜索各种类型的浏览器的请求头信息。
- 完整代码:
#伪装浏览器的爬虫
from urllib import request
import re
url="http://www.baidu.com/"
#构造请求头信息
header={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
req=request.Request(url,headers=header)
#发送请求.获取响应信息
reponse=request.urlopen(req).read().decode() #解码---(编码encode())
pat=r"<title>(.*?)</title>"
data=re.findall(pat,reponse)
print(data[0])#由于data返回的是列表形式的数据用data[0]直接取值
运行返回的结果为:
百度一下 你就知道
这里会发现数据外没有了[]。
图片来自网络.png
网友评论