Scrapy 增加隨機請求頭 user_agent
原文:
-
為什麽要增加隨機請求頭:更好地偽裝瀏覽器,防止被 Ban。
-
如何在每次請求時,更換不同的 user_agent,Scrapy 使用 Middleware 即可
Spider 中間件 (Middleware) 下載器中間件是介入到 Scrapy 的 spider 處理機制的鉤子框架,可以添加代碼來處理發送給 Spiders 的 response 及 spider 產生的 item 和 request。
官網說明在這裏:Spider Middleware
添加 middleware 的步驟:
1)創建一個中間件 (RandomAgentMiddleware)
設置請求時使用隨機 user_agent
2) 在 settings.py 中配置,激活中間件。
網上文章基本上轉的都是下面這段代碼:
-
這段代碼中的疑問:
1)自己寫的 Middleware 放在哪個目錄下
2)settings.py 中的 MIDDLEWARES 的路徑是如何定1)
自己編寫的中間件放在 items.py 和 settings.py 的同一級目錄。2)
settings.py 中的 MIDDLEWARES 的路徑,應該是:yourproject.middlewares(文件名).middleware類
如果你的中間件的類名和文件名都使用了 RandomUserAgentMiddleware,那這個路徑應該寫成:
xiaozhu.RandomUserAgentMiddleware.RandomUserAgentMiddleware
這一點,大家可以比較引入自己寫的 pipelines,只不過 Scrapy 框架本身為我們創建了一個 pipelines.py
3) 在 middleware 中間件中導入 settings 中的 USER_AGENT_LIST
我使用的是 mac,因為 settings.py 與 RandomUserAgentMiddleware 在同一級目錄from settings import USER_AGENT_LIST
Scrapy 增加隨機 user_agent 的完整代碼:
from settings import USER_AGENT_LIST import random from scrapy import log class RandomUserAgentMiddleware(object): def process_request(self, request, spider): ua = random.choice(USER_AGENT_LIST) if ua: request.headers.setdefault(‘User-Agent‘, ua)
settings.py 中:
USER_AGENT_LIST=[ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ] DOWNLOADER_MIDDLEWARES = { ‘xiaozhu.user_agent_middleware.RandomUserAgentMiddleware‘: 400, ‘scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware‘: None, }
代碼 Github: https://github.com/ppy2790/xiaozhu
Scrapy 增加隨機請求頭 user_agent