对urllib、requests、scrapy的总结

学习了爬虫有一段时间了,是时候对urllib、requests、scrapy三者的基本用法做一次总结了。

1、urllib模块

1.1、添加UA
 1 import urllib.request
 2 
 3 # User-Agent是爬虫与反爬虫的第一步
 4 ua_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) '
 5                             'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
 6 # 通过urllib2.Request()方法构造一个请求对象
 7 request = urllib.request.Request('http://www.baidu.com/', headers=ua_headers)
 8 response = urllib.request.urlopen(request)
 9 html = response.read()
10 
11 print(html)

 

1.2、ProxyHandler处理器(代理设置)

需要注意的是,urlopen()方法不支持代理,也不支持获取、存储cookie,所以要为我们的urllib设置代理或者进行cookie的操作的话需要先自定义opener()方法

 1 import urllib.request
 2 
 3 
 4 # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
 5 http_handler = urllib.request.HTTPHandler()
 6 
 7 # 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
 8 # http_handler = urllib2.request.HTTPSHandler()
 9 
10 # 调用urllib.request.build_opener()方法,创建支持处理HTTP请求的opener对象
11 opener = urllib.request.build_opener(http_handler)
12 
13 # 构建 Request请求
14 request = urllib.request.Request("http://www.baidu.com/")
15 
16 
17 # 调用自定义opener对象的open()方法,发送request请求
18 response = opener.open(request)
19 
20 # 获取服务器响应内容
21 print(response.read())

 这个时候在来添加我们的代理到urllib中

 1 import urllib.request
 2 
 3 # 构建了两个代理Handler,一个有代理IP,一个没有代理IP
 4 httpproxy_handler = urllib.request.ProxyHandler({"http": "124.88.67.81:80"})    # 传入的是字典
 5 nullproxy_handler = urllib.request.ProxyHandler({})
 6 
 7 proxySwitch = True #定义一个代理开关
 8 
 9 # 通过 urllib2.build_opener()方法使用这些代理Handler对象,创建自定义opener对象
10 # 根据代理开关是否打开,使用不同的代理模式
11 if proxySwitch:
12     opener = urllib.request.build_opener(httpproxy_handler)
13 else:
14     opener = urllib.request.build_opener(nullproxy_handler)
15 
16 request = urllib.request.Request("http://www.baidu.com/")
17 
18 # 1. 如果这么写,只有使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。
19 response = opener.open(request)
20 
21 # 2. 如果这么写,就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。
22 # urllib2.install_opener(opener)
23 # response = urlopen(request)
24 
25 print(response.read())

猜你喜欢

转载自www.cnblogs.com/pontoon/p/10321277.html