日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第7章 Scrapy突破反爬虫的限制

發布時間:2024/4/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第7章 Scrapy突破反爬虫的限制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

7-1 爬蟲和反爬的對抗過程以及策略

Ⅰ、爬蟲和反爬蟲基本概念

  • 爬蟲:自動獲取網站數據的程序,關鍵是批量的獲取。
  • 反爬蟲:使用技術手段防止爬蟲程序的方法。
  • 誤傷:反爬蟲技術將普通用戶識別為爬蟲,如果誤傷過高,效果再高也不能用。
  • 成本:反爬蟲需要的人力和機器成本。
  • 攔截:成功攔截爬蟲,一般攔截率越高,誤傷率越高。
  • Ⅱ、反爬蟲的目的

  • 初級爬蟲----簡單粗暴,不管服務器壓力,容易弄掛網站。
  • 數據保護
  • 失控的爬蟲----由于某些情況下,忘記或者無法關閉的爬蟲。
  • 商業競爭對手
  • Ⅲ、爬蟲和反爬蟲對抗過程

    7-2 scrapy架構源碼分析

    原理圖:

    我最早接觸scrapy的時候就是看這張原理圖,如下圖

    現在有新的原理圖,更加直觀,如下圖

    看了視頻講的源碼解析,看一遍根本看不懂,后期還要多看叫上項目的練習才行。

    7-3 Requests和Response介紹

    可以看scrapy文檔:?http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html?查看相關的說明即可。

    模擬登陸后,Request會自動傳遞cookies,不用我們添加。

    7-4~5 通過downloadmiddleware隨機更換user-agent

    這是個模版以后直接拿來用即可

    1 #middlewares.py文件 2 from fake_useragent import UserAgent #這是一個隨機UserAgent的包,里面有很多UserAgent 3 class RandomUserAgentMiddleware(object): 4 def __init__(self, crawler): 5 super(RandomUserAgentMiddleware, self).__init__() 6 7 self.ua = UserAgent() 8 self.ua_type = crawler.settings.get('RANDOM_UA_TYPE', 'random') #從setting文件中讀取RANDOM_UA_TYPE值 9 10 @classmethod 11 def from_crawler(cls, crawler): 12 return cls(crawler) 13 14 def process_request(self, request, spider): 15 def get_ua(): 16 '''Gets random UA based on the type setting (random, firefox…)''' 17 return getattr(self.ua, self.ua_type) 18 19 user_agent_random=get_ua() 20 request.headers.setdefault('User-Agent', user_agent_random) #這樣就是實現了User-Agent的隨即變換 1 #settings.py文件 2 DOWNLOADER_MIDDLEWARES = { 3 'Lagou.middlewares.RandomUserAgentMiddleware': 543, 4 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, #這里要設置原來的scrapy的useragent為None,否者會被覆蓋掉 5 } 6 RANDOM_UA_TYPE='random'

    7-6~8 scrapy實現ip代理池

    這是個模版以后直接拿來用即可

    1 #middlewares.py文件 2 class RandomProxyMiddleware(object): 3 '''動態設置ip代理''' 4 def process_request(self,request,spider): 5 get_ip = GetIP() #這里的函數是傳值ip的 6 request.meta["proxy"] = get_ip 7 #例如 8 #get_ip = GetIP() #這里的函數是傳值ip的 9 #request.meta["proxy"] = 'http://110.73.54.0:8123' 10 11 12 #settings.py文件 13 DOWNLOADER_MIDDLEWARES = { 14 'Lagou.middlewares.RandomProxyMiddleware':542, 15 'Lagou.middlewares.RandomUserAgentMiddleware': 543, 16 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, #這里要設置原來的scrapy的useragent為None,否者會被覆蓋掉 17 }

    1.sql語言取出隨機記錄:在此是隨機取出一條記錄是ip和端口組成代理IP

    1 select ip,port from proxy_ip 2 order by rand() 3 limit 1

    2.使用xpath選擇器:

    可以使用scrapy中的selector,代碼如下:

    1 from scrapy.selector import Selector 2 html=requests.get(url) 3 Selector=Selector(text=html.text) 4 Selector.xpath()

    3.if __name__ == "__main__"問題

    如果沒有這個,調用時會默認運行以下命令

    1 if __name__ == "__main__": 2 get_ip=GetIp() 3 get_ip.get_random_ip()

    7-9 云打碼實現驗證碼識別

    驗證碼識別方法

  • 編碼實現(tesseract-ocr)
  • 在線打碼----打碼平臺(云打碼、若快)
  • 人工打碼
  • 7-10 cookie禁用、自動限速、自定義spider的settings

    如果用不到cookies的,就不要讓對方知道你的cookies--設置---COOKIES_ENABLED = False

    自定義setting中的參數可以這樣寫:

    1 #在spider.py文件中 2 custom_settings={ 3 "COOKIES_ENABLED":True, 4 "":"", 5 "":"", 6 }

    作者:今孝

    出處:http://www.cnblogs.com/jinxiao-pu/p/6762636.html

    本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

    轉載于:https://www.cnblogs.com/jinxiao-pu/p/6762636.html

    總結

    以上是生活随笔為你收集整理的第7章 Scrapy突破反爬虫的限制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。