我們在做scrapy爬蟲的時候,爬蟲經常被ban是常態(tài)。然而前面的文章如何讓你的scrapy爬蟲不再被ban,介紹了scrapy爬蟲防屏蔽的各種策略組合。前面采用的是禁用cookies、動態(tài)設置user agent、代理IP和VPN等一系列的措施組合來防止爬蟲被ban。除此以外官方文檔還介紹了采用Google cache和crawlera的方法。這里就著重介紹一下如何利用crawlera來達到爬蟲不被ban的效果。crawlera是一個利用代理IP地址池來做分布式下載的第三方平臺,除了scrapy可以用以外,普通的java、php、python等都可以通過curl的方式來調用。好了,下面入正題。 說明: 本文章是基于前面的一系列文章完成的,如果您錯過了??梢栽诖瞬榭矗?/p> scrapy爬蟲成長日記之創(chuàng)建工程-抽取數據-保存為json格式的數據 crawlera官方網址:http:///crawlera/ crawlera幫助文檔:http://doc./crawlera.html 一、注冊crawlera賬號,獲取crawlera API KEY 1、注冊一個crawlera賬號并激活 https://dash./account/signup/ 填寫好用戶名,郵件和密碼點擊sign up即完成注冊,收到注冊確認郵件確認即可。 2、創(chuàng)建一個Organizations 3、創(chuàng)建完Organizations后添加crawlera user 4、查看API key 點擊crawlera user的名稱jack就可以查看API的詳細信息了(key)
至此,crawlera API的信息已經獲取到了。 二、修改scrapy項目 下面看看怎么添加到scrapy項目 1、安裝scrapy-crawlera pip install scrapy-crawlera
2、修改settings.py DOWNLOADER_MIDDLEWARES下添加配置項 'scrapy_crawlera.CrawleraMiddleware': 600 其他配置項 CRAWLERA_ENABLED = True CRAWLERA_USER = '<API key>' CRAWLERA_PASS = '你crawlera賬號的密碼' 注意:由于之前的項目用了自定義代理的方式,因此DOWNLOADER_MIDDLEWARES下的 #'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, #代理需要用到 #'cnblogs.middlewares.ProxyMiddleware': 100, #代理需要用到 這兩個配置項要注釋掉。 3、測試crawlera的抓取是否可用 scrapy crawl CnblogsSpider 4、查看結果 這里可以看到crawlera已經正常工作了。 5、另外crawlera官網也可以查看抓取結果 scrapy運用crawlera進行抓取就介紹到這里。另外crawlera還提供付費定制服務,如果經費充足也可以考慮付費定制scrapy的爬蟲。 代碼更新至此:https://github.com/jackgitgz/CnblogsSpider(提交到github的代碼將api和password去掉了,如果想運行需要添加自己的key和password) 三、題外話: 如果你不是scrapy爬蟲,而僅僅是想python調用,crawlera也提供了python直接調用的方法 1、通過request的方式 import requests url = "http://twitter.com" proxy = "paygo.crawlera.com:8010" proxy_auth = "<API KEY>:" proxies = { "http": "http://{0}@{1}/".format(proxy_auth, proxy) } headers = { "X-Crawlera-Use-HTTPS": 1 } r = requests.get(url, proxies=proxies, headers=headers) print(""" Requesting [{}] through proxy [{}] Response Time: {} Response Code: {} Response Headers: {} Response Body: {} """.format(url, proxy, r.elapsed.total_seconds(), r.status_code, r.headers, r.text)) 2、request代理重寫url import requests from requests.auth import HTTPProxyAuth url = "https://twitter.com" headers = {} proxy_host = "paygo.crawlera.com" proxy_auth = HTTPProxyAuth("<API KEY>", "") proxies = {"http": "http://{}:8010/".format(proxy_host)} if url.startswith("https:"): url = "http://" + url[8:] headers["X-Crawlera-Use-HTTPS"] = "1" r = requests.get(url, headers=headers, proxies=proxies, auth=proxy_auth) print(""" Requesting [{}] through proxy [{}] Response Time: {} Response Code: {} Response Headers: {} Response Body: {} """.format(url, proxy_host, r.elapsed.total_seconds(), r.status_code, r.headers, r.text)) crawlera就介紹到這里,更多關于crawlera的內容可以參考官方文檔:http://doc./index.html |
|
來自: 昵稱47241897 > 《編程類》