# 浏览器模拟---Headers属性
# 有时候,我们无法爬取一下网页,会出现403错误,应为这些网页为了防止别人恶意采集其信息
# 所以进行了一些反爬虫的设置
# 所以想进行反爬机制可设置一些Header信息,模拟浏览器去进行访问网站
# 首先用之前的方法进行爬取
# import urllib.request
#
# url = "https://movie.douban.com"
# file = urllib.request.urlopen(url)
# print(file)
#故会出现的错误:urllib.error.HTTPError: HTTP Error 418:
# 接下来我们讲解两种让爬虫模拟成了浏览器访问网页的设置方法
# 方法1:使用build_opener()修改报头
# 由于URLopen()不支持一些http的高级功能所以我们如果要修改报头,
# 可以使用urlib.request.build_opener()进行,
import urllib.request
url = "https://movie.douban.com"
headers = ("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()
print(data)
# 对上述代码进行解释:首先进行定义一个变量url存储要爬取的网站,然后在在定义一个变量
# headers存储对应的User-agent信息,定义的格式为("User-Agent",具体信息)
# 然后我们需要使用urllib.request.build_opener()创建自定义的opener对象并赋给变量opener
# 接下来设置opener对象的addheaders 设置对应的头信息,
# 设置格式为“opener对象名.addheaders=[头信息]
# 使用opener对象的.open()方法打开对应的网址了,使用格式是opener对象名.open(url地址)。
# 打开对应网址后,再使用read()方法读取对应数据,并赋给data变量
# 然后进行写入文件
fhandle=open("G:/百度网盘/精通Python网络爬虫源码/书中源码/2.html", "wb")
fhandle.write(data)
fhandle.close()
# 方法二,使用add_header()添加报头,还有可以使用urllib.request.Request()下的add_header()
# 实现浏览器模拟器
import urllib.request
url = "http://blog.csdn.net/weiwei_pig/article/details/51178226"
req = urllib.request.Request(url)
req.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0')
data = urllib.request.urlopen(req).read()
print(data)
# 设置要爬取的网址,然后使用urllib.request.Request(url)创建一个Request对象并赋给变量req
# 创建对象的格式为:urllib.request.Request(url地址)
# 随后,使用add_header()方法添加对应的报头信息,格式为:Request对象名.add_header(字段名,字段值)
# 设置好报头,然后我们使用urlopen()打开该Request对象即可打开对应网址,所以此时我们使用data=urllib.request.urlopen(req)。read()
# 打开对应网址并读取了网页内容,并赋给了data变量