python爬虫——反反爬百度网页教程
爬取百度主页数据
我们直接用python自带的url.request.urlopen是不能顺利获取百度网页的数据的,我们会得到如下的结果
import urllib.request response = urllib.request.urlopen(https://www.baidu.com/) print(response.read())
运行后得到的结果是: 很明显个对应百度的源码是不一样的,百度网页设置的反扒机制
应用url.request.Request重构网点的user agent,即可爬取数据
分三个步骤:1.创建请求对象,对应的代码块:
headers = { User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36} req = urllib.request.Request(url,headers=headers)
###上面的headers为一个用户代理,用于取代人工,意思是告诉网页是人在获取网页源代码而不是程序在获取源代码(也就是‘欺骗网页,不是在爬取数据,是人在读取数据,但是实际是代码在爬取源代码’)
###urllib.request.Request意思是把url的代理替换成人工,也就是上面所说的‘欺骗’,req创建相应的请求对象
2.获取响应对象:
response = urllib.request.urlopen(req)
把上面创建的对象打开
3.读取响应对象:
html = response.read().decode(utf-8)
下面展示完整的代码:
# url = http://www.baidu.com/ # headers = {User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36}#字典 # #创建请求对象 # req = urllib.request.Request(url,headers=headers) # #获取响应对象 # response = urllib.request.urlopen(req) # #读取响应对象的内容 # html = response.read().decode(utf-8) # print(html)
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
ARM汇编基础知识点总结