python scrapy和requests区别
学习了爬虫有一段时间了,是时候对urllib、requests、scrapy三者的基本用法做一次总结了。
1、urllib模块
1.1、添加UA
1 importurllib.request2
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('/', 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 importurllib.request2
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("/")15
16
17 #调用自定义opener对象的open()方法,发送request请求
18 response =opener.open(request)19
20 #获取服务器响应内容
21 print(response.read())
这个时候在来添加代理到urllib中
1 importurllib.request2
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 ifproxySwitch:12 opener =urllib.request.build_opener(httpproxy_handler)13 else:14 opener =urllib.request.build_opener(nullproxy_handler)15
16 request = urllib.request.Request("/")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())
1.3、HTTPCookieProcessor处理器(urllib添加cookie)
1 importurllib.request2 import http.cookiejar as cj #python3中将cookielib改成了http.cookiejar
3
4 #构建一个CookieJar对象实例来保存cookie
5 cookiejar =cj.CookieJar()6
7 #使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
8 handler=urllib.request.HTTPCookieProcessor(cookiejar)9
10 #通过 build_opener() 来构建opener
11 opener =urllib.request.build_opener(handler)12
13 #4. 以get方法访问页面,访问之后会自动保存cookie到cookiejar中
14 opener.open("")15
16 #可以按标准格式将保存的Cookie打印出来
17 cookieStr = ""
18 for item incookiejar:19 cookieStr = cookieStr + item.name + "=" + item.value + ";"
20
21 #舍去最后一位的分号
22 print(cookieStr[:-1])
可以看到urllib在添加代理,处理cookie的时候,需要做额外的配置,显得冗余且不好理解,别担心用requests
2、requests模块
2.1、添加UA
1 importrequests2
3 kw = {'wd':'长城'}4
5 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}6
7 #params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
8 response = requests.get("?", params = kw, headers =headers)9
10 #查看响应内容,response.text 返回的是Unicode格式的数据
11 print(response.text)12
13 #查看响应内容,response.content返回的字节流数据
14 print(respones.content)15
16 #查看完整url地址
17 print(response.url)18
19 #查看响应头部字符编码
20 print(response.encoding)21
22 #查看响应码
23 print(response.status_code)
2.2、设置代理
mport requests#根据协议类型,选择不同的代理
proxies ={"http": ":9527","https": ":9527",
}
response= requests.get("", proxies =proxies)print(response.text)
2.3、直接获取到HTTP-Cookie
1 importrequests2
3 response = requests.get("/")4
5 #7. 返回CookieJar对象:
6 cookie_jar =response.cookies7
8 #8. 将CookieJar转为字典(两种实现方式):
9 #cookie_dict = requests.utils.dict_from_cookiejar(cookie_jar)
10 cookie_dict =response.cookies.get_dict()11
12 print(cookie_jar)13
14 print(cookie_dict)
案例通过cookie访问抽屉的个人中心
1 importrequests2
3 cookie ={4 "gpsd": "b3c059bef6faa0fd56282xxxxxx",5 "JSESSIONID": "aaaTto6SLmxxxxxxxx",6 "gpid": "22bb5d4a3f824de78ad3d7fe7a0844f6",7 "gdxidpyhxdE": "M%2FOPyR5HMhg2qRDg2JQh9Z2KqygiCEXUUqpe0aqcwnTa%5CmsjKCoHoRRdnjJQAiCUcaAdEDrfiaKCP9ux7Sm2p6d69R24JWVPnHx0eHXgdo36PAY%2BD1BaTE8VJVw%2FDyImCiDbTRpdYL%2BXWArApjKJ31hgGTas1sGXOIdfAz0odXPdPDTg%3A1548427514478",8 "_9755xjdesxxd_": "32",9 "YD00000980905869%3AWM_NI": "zcykmdAFAGI4wEjxR%2BvX5ORpNMHi27FQebIhsdcSKxDk7TDy2y4kt13hjn4jV7ekyTlc%2BmR7Bs4a6DoM1eHXzS%2FgXa68mylIFXNyQd7Pjr%2FP2RvJSYwNTqwWgKcBsoRFSk0%3D",10 "YD00000980905869%3AWM_NIKE": "9ca17ae2e6ffcda170e2e6eed7c16f9c95aeb1b33d86b88ba2c15f979a9bbbbb648a8fb6acd065a1bbbe8eeb2af0fea7c3b92ababdb78cf070839a8fa8cc40b59ba699d121b688fbb0d17c8e93888ab13d868fab83cc64b1bcadb4ca7xxxxx773f2a7fxx76296e9ab8cfc60b0bde58ed13d82xx86cb54ba8de188db6bf6e8a39aef438688829ad470f590a693ae5cf28ebaabd253b5929c92f65da595ada3f265929a9d8cb337e2a3",11 "YD00000980905869%3AWM_TID": "zJgV%2FKPggm9BFUxxplJBzLdoNer3x",12 }13 headers ={14 "User-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
15 "Chrome/71.0.3578.98 Safari/537.36"
16 }17 response = requests.get("", cookies=cookie, headers=headers)18
19 print(response.text)
代码中的cookie做了处理详细的以自身为准。
更多关于requests的用法参考官方文档,以及以后更的博客内容。我在这里只是展示下对比,方便记忆。
3、scrapy框架
scrapy是爬虫的框架,框架操作起来相较于模块就更加的复杂。
3.1、scrapy添加UA
在scrapy中添加User-agent的地方有很多,我一一的列出来:
1)直接写在spider中
当然了上面的这种需要在每一次的Request中加上headers=self.headers操作,这样写起来相当麻烦。可以采用另外的方式来进行。
2)直接写在settings.py中
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 \
Safari/537.36 SE 2.X MetaSr 1.0'
或者
DEFAULT_REQUEST_HEADERS ={'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',"authority": "www.dangdang","method": "GET","path": "/","scheme": "http","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","accept-encoding": 'gzip, deflate, br',"accept-language": 'en-US,en;q=0.9',"referer": None,"upgrade-insecure-requests": 1,"User-Agent": 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 \
Safari/537.36 SE 2.X MetaSr 1.0'}
写在DEFAULT_REQUEST_HEADERS的User-Ahent也需要每次都在Request的时候加上headers = DEFAULT_REQUEST_HEADERS,当然了上面说的两种添加UA的方式都是在目标网站没有做反爬虫的前提下进行的。如果限制了UA,上面
的两种做法,在你爬取了一定量数据的时候就很可能你的爬虫就会被BAN。
2)写在中间件里或者写在一个单独的文件中,实现随机获取UA
这种做法你在网上一搜一大堆,具体的过程我不想说了,直接上代码。
middlewares.py
from fake_useragent importUserAgentclassRandomUserAgentMiddleWare(object):#随机更换user-agent
def __init__(self, crawler):
super(RandomUserAgentMiddleWare, self).__init__()#self.user_agent_list = crawler.settings.get("user_agent_list", [])
self.user_agent =UserAgent()
self.user_agent_type= crawler.settings.get("RANDOM_UA_TYPE", "random")
@classmethoddeffrom_crawler(cls, crawler):returncls(crawler)defprocess_request(self, request, spider):defget_user_agent():"""字符串取类中的方法"""
returngetattr(self.user_agent, self.user_agent_type)#ua = get_user_agent()
request.headers.setdefault('User-Agent', get_user_agent())
settings.py
RANDOM_UA_TYPE = "random" #随机生成UA的类型
...
DOWNLOADER_MIDDLEWARES ={'ArticleSpider.middlewares.RandomUserAgentMiddleWare': 543,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None, # 加上这段
}
还有就是以文件的方式存储UA然后random.choice()去取,懒得贴代码了。
3.2、scrapy设置代理IP
pass
3.3、scrapy添加cookies
在scrapy中添加cookies要先从settings.py这里说起
#Disable cookies (enabled by default)#COOKIES_ENABLED = False
默认是启用了cookiesmiddleware,可以看一下cookiesmiddleware的源码
如果把 COOKIES_ENABLED = False 的注释取消掉,直接执行红框的代码。那么就无法实例化这个类,无法实例化类就不走__init__(),后面的代码就不走了,也就是说关闭了cookiesmiddleware。经常在一些博客上看见这样的骚操作COOKIES_ENABLED = True 这不是多此一举吗?
添加cookies该怎么做啦?
当然添加cookies还可以这样写,直接写在Request()请求中确保注释掉# COOKIES_ENABLED = False
defstart_requests(self):yield Request(url=self.start_urls[0],
cookies={"gpsd": "e8cf1xxxx0ab4c44","JSESSIONID": "aaxxNFteIw","gpid": "xxx26264038c5583","gdxidpyhxdE": "yweI%2F%2xxxCCNPrGT0zAgxxKnupVwxxxUe%2BuG5wAOxzw7kRxxx6xxxx2FMJ%2BvNcJHDaAxEUxxxm4EIt028fj8Gokxxxx293023973","_9755xjdesxxd_": "32","puid": "xxxxxx","puid": "xxx8",
},
callback=self.parse)
也可以写在中间件里确保注释掉 # COOKIES_ENABLED = False
classTestCookieDownloaderMiddleware(object):
@classmethoddeffrom_crawler(cls, crawler):
s=cls()returnsdefprocess_request(self, request, spider):
cookie_dict={"gpsd": "e8cf1dd46xxx966e0ab4c44","JSESSIONID": "aaa8hxxxNFteIw","gpid": "c36f5xx0d4xx8c5583","gdxidpyhxdE": "yweI%2F%2F%5CCNPrGT0xxxxxOlWiDSOslTJTOq2vMUe%2BuG5wAOxzw7kR%2FxxxxxAxEUCSITyYb87Mhxr8TxxxT3MQ4m4EIt028fj8Gok%3A1550293023973","_9755xjdesxxd_": "32","puid": "cdxxxx79005045","puid": "dxx62d9xxxxxf4c8",
}
request.cookies=cookie_dictdefprocess_response(self, request, response, spider):return response
这样的话每一次你的Request请求都会携带着写好的cookies,可以跳过一些网站的登录直接访问内容,当然了在实际开发中不可能让你这么简单就跳过登陆了,以淘宝为例一个cookies最多让你访问20个页面,这个时候cookies池就很关键了,关于cookie池的建立先跳过,后面再来填坑。
python scrapy和requests区别
学习了爬虫有一段时间了,是时候对urllib、requests、scrapy三者的基本用法做一次总结了。
1、urllib模块
1.1、添加UA
1 importurllib.request2
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('/', 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 importurllib.request2
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("/")15
16
17 #调用自定义opener对象的open()方法,发送request请求
18 response =opener.open(request)19
20 #获取服务器响应内容
21 print(response.read())
这个时候在来添加代理到urllib中
1 importurllib.request2
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 ifproxySwitch:12 opener =urllib.request.build_opener(httpproxy_handler)13 else:14 opener =urllib.request.build_opener(nullproxy_handler)15
16 request = urllib.request.Request("/")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())
1.3、HTTPCookieProcessor处理器(urllib添加cookie)
1 importurllib.request2 import http.cookiejar as cj #python3中将cookielib改成了http.cookiejar
3
4 #构建一个CookieJar对象实例来保存cookie
5 cookiejar =cj.CookieJar()6
7 #使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
8 handler=urllib.request.HTTPCookieProcessor(cookiejar)9
10 #通过 build_opener() 来构建opener
11 opener =urllib.request.build_opener(handler)12
13 #4. 以get方法访问页面,访问之后会自动保存cookie到cookiejar中
14 opener.open("")15
16 #可以按标准格式将保存的Cookie打印出来
17 cookieStr = ""
18 for item incookiejar:19 cookieStr = cookieStr + item.name + "=" + item.value + ";"
20
21 #舍去最后一位的分号
22 print(cookieStr[:-1])
可以看到urllib在添加代理,处理cookie的时候,需要做额外的配置,显得冗余且不好理解,别担心用requests
2、requests模块
2.1、添加UA
1 importrequests2
3 kw = {'wd':'长城'}4
5 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}6
7 #params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
8 response = requests.get("?", params = kw, headers =headers)9
10 #查看响应内容,response.text 返回的是Unicode格式的数据
11 print(response.text)12
13 #查看响应内容,response.content返回的字节流数据
14 print(respones.content)15
16 #查看完整url地址
17 print(response.url)18
19 #查看响应头部字符编码
20 print(response.encoding)21
22 #查看响应码
23 print(response.status_code)
2.2、设置代理
mport requests#根据协议类型,选择不同的代理
proxies ={"http": ":9527","https": ":9527",
}
response= requests.get("", proxies =proxies)print(response.text)
2.3、直接获取到HTTP-Cookie
1 importrequests2
3 response = requests.get("/")4
5 #7. 返回CookieJar对象:
6 cookie_jar =response.cookies7
8 #8. 将CookieJar转为字典(两种实现方式):
9 #cookie_dict = requests.utils.dict_from_cookiejar(cookie_jar)
10 cookie_dict =response.cookies.get_dict()11
12 print(cookie_jar)13
14 print(cookie_dict)
案例通过cookie访问抽屉的个人中心
1 importrequests2
3 cookie ={4 "gpsd": "b3c059bef6faa0fd56282xxxxxx",5 "JSESSIONID": "aaaTto6SLmxxxxxxxx",6 "gpid": "22bb5d4a3f824de78ad3d7fe7a0844f6",7 "gdxidpyhxdE": "M%2FOPyR5HMhg2qRDg2JQh9Z2KqygiCEXUUqpe0aqcwnTa%5CmsjKCoHoRRdnjJQAiCUcaAdEDrfiaKCP9ux7Sm2p6d69R24JWVPnHx0eHXgdo36PAY%2BD1BaTE8VJVw%2FDyImCiDbTRpdYL%2BXWArApjKJ31hgGTas1sGXOIdfAz0odXPdPDTg%3A1548427514478",8 "_9755xjdesxxd_": "32",9 "YD00000980905869%3AWM_NI": "zcykmdAFAGI4wEjxR%2BvX5ORpNMHi27FQebIhsdcSKxDk7TDy2y4kt13hjn4jV7ekyTlc%2BmR7Bs4a6DoM1eHXzS%2FgXa68mylIFXNyQd7Pjr%2FP2RvJSYwNTqwWgKcBsoRFSk0%3D",10 "YD00000980905869%3AWM_NIKE": "9ca17ae2e6ffcda170e2e6eed7c16f9c95aeb1b33d86b88ba2c15f979a9bbbbb648a8fb6acd065a1bbbe8eeb2af0fea7c3b92ababdb78cf070839a8fa8cc40b59ba699d121b688fbb0d17c8e93888ab13d868fab83cc64b1bcadb4ca7xxxxx773f2a7fxx76296e9ab8cfc60b0bde58ed13d82xx86cb54ba8de188db6bf6e8a39aef438688829ad470f590a693ae5cf28ebaabd253b5929c92f65da595ada3f265929a9d8cb337e2a3",11 "YD00000980905869%3AWM_TID": "zJgV%2FKPggm9BFUxxplJBzLdoNer3x",12 }13 headers ={14 "User-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
15 "Chrome/71.0.3578.98 Safari/537.36"
16 }17 response = requests.get("", cookies=cookie, headers=headers)18
19 print(response.text)
代码中的cookie做了处理详细的以自身为准。
更多关于requests的用法参考官方文档,以及以后更的博客内容。我在这里只是展示下对比,方便记忆。
3、scrapy框架
scrapy是爬虫的框架,框架操作起来相较于模块就更加的复杂。
3.1、scrapy添加UA
在scrapy中添加User-agent的地方有很多,我一一的列出来:
1)直接写在spider中
当然了上面的这种需要在每一次的Request中加上headers=self.headers操作,这样写起来相当麻烦。可以采用另外的方式来进行。
2)直接写在settings.py中
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 \
Safari/537.36 SE 2.X MetaSr 1.0'
或者
DEFAULT_REQUEST_HEADERS ={'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',"authority": "www.dangdang","method": "GET","path": "/","scheme": "http","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","accept-encoding": 'gzip, deflate, br',"accept-language": 'en-US,en;q=0.9',"referer": None,"upgrade-insecure-requests": 1,"User-Agent": 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 \
Safari/537.36 SE 2.X MetaSr 1.0'}
写在DEFAULT_REQUEST_HEADERS的User-Ahent也需要每次都在Request的时候加上headers = DEFAULT_REQUEST_HEADERS,当然了上面说的两种添加UA的方式都是在目标网站没有做反爬虫的前提下进行的。如果限制了UA,上面
的两种做法,在你爬取了一定量数据的时候就很可能你的爬虫就会被BAN。
2)写在中间件里或者写在一个单独的文件中,实现随机获取UA
这种做法你在网上一搜一大堆,具体的过程我不想说了,直接上代码。
middlewares.py
from fake_useragent importUserAgentclassRandomUserAgentMiddleWare(object):#随机更换user-agent
def __init__(self, crawler):
super(RandomUserAgentMiddleWare, self).__init__()#self.user_agent_list = crawler.settings.get("user_agent_list", [])
self.user_agent =UserAgent()
self.user_agent_type= crawler.settings.get("RANDOM_UA_TYPE", "random")
@classmethoddeffrom_crawler(cls, crawler):returncls(crawler)defprocess_request(self, request, spider):defget_user_agent():"""字符串取类中的方法"""
returngetattr(self.user_agent, self.user_agent_type)#ua = get_user_agent()
request.headers.setdefault('User-Agent', get_user_agent())
settings.py
RANDOM_UA_TYPE = "random" #随机生成UA的类型
...
DOWNLOADER_MIDDLEWARES ={'ArticleSpider.middlewares.RandomUserAgentMiddleWare': 543,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None, # 加上这段
}
还有就是以文件的方式存储UA然后random.choice()去取,懒得贴代码了。
3.2、scrapy设置代理IP
pass
3.3、scrapy添加cookies
在scrapy中添加cookies要先从settings.py这里说起
#Disable cookies (enabled by default)#COOKIES_ENABLED = False
默认是启用了cookiesmiddleware,可以看一下cookiesmiddleware的源码
如果把 COOKIES_ENABLED = False 的注释取消掉,直接执行红框的代码。那么就无法实例化这个类,无法实例化类就不走__init__(),后面的代码就不走了,也就是说关闭了cookiesmiddleware。经常在一些博客上看见这样的骚操作COOKIES_ENABLED = True 这不是多此一举吗?
添加cookies该怎么做啦?
当然添加cookies还可以这样写,直接写在Request()请求中确保注释掉# COOKIES_ENABLED = False
defstart_requests(self):yield Request(url=self.start_urls[0],
cookies={"gpsd": "e8cf1xxxx0ab4c44","JSESSIONID": "aaxxNFteIw","gpid": "xxx26264038c5583","gdxidpyhxdE": "yweI%2F%2xxxCCNPrGT0zAgxxKnupVwxxxUe%2BuG5wAOxzw7kRxxx6xxxx2FMJ%2BvNcJHDaAxEUxxxm4EIt028fj8Gokxxxx293023973","_9755xjdesxxd_": "32","puid": "xxxxxx","puid": "xxx8",
},
callback=self.parse)
也可以写在中间件里确保注释掉 # COOKIES_ENABLED = False
classTestCookieDownloaderMiddleware(object):
@classmethoddeffrom_crawler(cls, crawler):
s=cls()returnsdefprocess_request(self, request, spider):
cookie_dict={"gpsd": "e8cf1dd46xxx966e0ab4c44","JSESSIONID": "aaa8hxxxNFteIw","gpid": "c36f5xx0d4xx8c5583","gdxidpyhxdE": "yweI%2F%2F%5CCNPrGT0xxxxxOlWiDSOslTJTOq2vMUe%2BuG5wAOxzw7kR%2FxxxxxAxEUCSITyYb87Mhxr8TxxxT3MQ4m4EIt028fj8Gok%3A1550293023973","_9755xjdesxxd_": "32","puid": "cdxxxx79005045","puid": "dxx62d9xxxxxf4c8",
}
request.cookies=cookie_dictdefprocess_response(self, request, response, spider):return response
这样的话每一次你的Request请求都会携带着写好的cookies,可以跳过一些网站的登录直接访问内容,当然了在实际开发中不可能让你这么简单就跳过登陆了,以淘宝为例一个cookies最多让你访问20个页面,这个时候cookies池就很关键了,关于cookie池的建立先跳过,后面再来填坑。
发布评论