对urllibrequestsscrapy的总结
Posted pontoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对urllibrequestsscrapy的总结相关的知识,希望对你有一定的参考价值。
学习了爬虫有一段时间了,是时候对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())
以上是关于对urllibrequestsscrapy的总结的主要内容,如果未能解决你的问题,请参考以下文章