Python爬蟲scrapy框架Cookie池(微博Cookie池)的使用
阿新 • • 發佈:2019-01-01
下載程式碼Cookie池(這裡主要是微博登入,也可以自己配置置其他的站點網址)
下載安裝過後注意看網頁下面的相關基礎配置和操作!!!!!!!!!!!!!
自己的設定主要有下面幾步:
1、配置其他設定
2、設定使用的瀏覽器
3、設定模擬登陸
原始碼cookies.py的修改(以下兩處不修改可能會產生bug):
4、獲取cookie
隨機獲取Cookies: http://localhost:5000/weibo/random(注意:cookie使用時是需要後期處理的!!)
簡單的處理方式,如下程式碼(偶爾需要對獲取的cookie處理):
def get_cookie(self): return requests.get('http://127.0.0.1:5000/weibo/random').text def stringToDict(self,cookie): itemDict = {} items = cookie.replace(':', '=').split(',') for item in items: key = item.split('=')[0].replace(' ', '').strip(' "') value = item.split('=')[1].strip(' "') itemDict[key] = value return itemDict
def start_requests(self): ua = UserAgent() headers = { 'User-Agent': ua.random, } cookies = self.stringToDict(str(self.get_cookie().strip('{|}'))) yield scrapy.Request(url=self.start_urls[0], headers=headers, cookies=cookies, callback=self.parse)
cookies = self.stringToDict(str(self.get_cookie().strip('{|}'))) yield scrapy.Request(url=self.start_urls[0], headers=headers, cookies=cookies, callback=self.parse)
scrapy爬蟲的使用示例(爬取微博):
middlewares.py中自定義請求中介軟體
import requests import logging import json # 自定義微博請求的中介軟體 class WeiBoMiddleWare(object): def __init__(self, cookies_pool_url): self.logging = logging.getLogger("WeiBoMiddleWare") self.cookies_pool_url = cookies_pool_url def get_random_cookies(self): try: response = requests.get(self.cookies_pool_url) except Exception as e: self.logging.info('Get Cookies failed: {}'.format(e)) else: # 在中介軟體中,設定請求頭攜帶的Cookies值,必須是一個字典,不能直接設定字串。 cookies = json.loads(response.text) self.logging.info('Get Cookies success: {}'.format(response.text)) return cookies @classmethod def from_settings(cls, settings): obj = cls( cookies_pool_url=settings['WEIBO_COOKIES_URL'] ) return obj # process_request()該方法會被多次呼叫,每一個request請求都會經過這個方法交給downloader def process_request(self, request, spider): request.cookies = self.get_random_cookies() return None def process_response(self, request, response, spider): """ 對此次請求的響應進行處理。 :param request: :param response: :param spider: :return: """ # 攜帶cookie進行頁面請求時,可能會出現cookies失效的情況。訪問失敗會出現兩種情況:1. 重定向302到登入頁面;2. 也能會出現驗證的情況; # 想攔截重定向請求,需要在settings中配置。 if response.status in [302, 301]: # 如果出現了重定向,獲取重定向的地址 redirect_url = response.headers['location'] if 'passport' in redirect_url: # 重定向到了登入頁面,Cookie失效。 self.logging.info('Cookies Invaild!') if '驗證頁面' in redirect_url: # Cookies還能繼續使用,針對賬號進行的反爬蟲。 self.logging.info('當前Cookie無法使用,需要認證。') # 如果出現重定向,說明此次請求失敗,繼續獲取一個新的Cookie,重新對此次請求request進行訪問。 request.cookies = self.get_random_cookies() # 返回值request: 停止後續的response中介軟體,而是將request重新放入排程器的佇列中重新請求。 return request # 如果沒有出現重定向,直接將response向下傳遞後續的中介軟體。 return response
settings.py 中的配置:
5、錄入賬號和密碼:
格式規定(賬號----密碼)
6、驗證:(注意:使用cmd)
7、使用時注意保持cmd開啟執行!!
使用時一定要開啟cmd,並執行如第6步。
得到Cookie是判斷是否處理處理Cookie(幾乎都需要!!)類比第4步!!!