scrapy爬蟲如何穿越表單,採集你想要的數據

2020-12-11 數據燈塔

很多時候在進行數據採集的時候,是需要登錄該網站的,這樣涉及到了表單登錄,你需要輸入用戶名密碼,還有驗證碼,多數情況我們在向一個靜態網站發起get請求就可以拿到其數據。但在需要提交登錄表單這種情況就需要用到post請求。除了提交用戶密碼之外,圖形驗證也是非常的複雜。

用一個實例來完成這些操作,保證百分之80的網站以後都能使用。我們用scrapy來建立一個爬蟲項目。

首先我們來分析一下網站的機制,輸入用戶名密碼,這肯定是你事先申請好的,然後點擊登錄,看Network登錄反應,

如圖所示,FormData裡面很清楚的看到了,登錄接口的URL,表單數據,從那個頁面登錄,登錄名,密碼,把它都複製下來。

拿到這些,我們需要在爬蟲裡去建立表單,發起請求。

這裡一定要注意的是,這個登錄請求的url不一樣的話,它的開發者模式裡面現實的也不一樣。所以要特別注意。

打開爬蟲py文件,寫代碼部分:

整個登錄表單代碼部分就完成了,其實沒那麼難,就是模擬用戶在一般情況下登錄一個網站所需輸入的東西,這裡只是用代碼來完成而已。

表單基本上可以看成一種用戶提交 POST 請求的方式,且這種請求方式是 Web 伺服器能夠理解和使用的。就像網站的連結標記可以幫助用戶發出 GET 請求一樣,HTML 表單可以幫助用戶發出 POST 請求。當然,我們也可以寫一點兒代碼來自己創建這些請求,然後通過網絡爬蟲把它們提交給伺服器。

大家有沒有發現我們的驗證碼captcha-id還沒有寫入表單裡面去,那這個captcha-id要怎麼得到呢?

分析開發者模式可以看到驗證碼,captcha_iD在name屬性下面,後面的value值是隨機填充的,需要用請求響應回來的rensponse拿到它。

就是用response.xpath 提取到我們的圖形驗證captcha-id。

這裡要強調一下,我們在登錄一個頁面的時候,如果第一次登錄成功是不會有驗證碼的,所以這裡必須有一個判斷,判斷在有沒有驗證碼的時候我們該怎麼去登錄。

然後yield scrapy.FormRequest(url=url,formdata=formdata,callback=self.parse(自己建立的回調處理函數))

在運行這個爬蟲的時候如果登錄成功,那麼網站的首頁就會展現在我們的面前,如果沒有就會報錯。

網頁表單是網絡惡意機器人(malicious bots)酷愛的網站切入點。你當然不希望機器人創建垃圾帳號,佔用昂貴的伺服器資源,或者在博客上提交垃圾評論。因此,現代網站經常在 HTML 中採取很多安全措施,讓表單不能被快速穿越。關於驗證碼(CAPTCHA)的作用,如果你在提交表單時遇到了一個莫名其妙的錯誤,或者伺服器一直以陌生的理由拒絕你,

當你不想讓自己的文字被網絡機器人抓取時,把文字做成圖片放在網頁上是常用的辦法。在聯繫人表單裡經常可以看到一個郵箱地址被部分或全部轉換成圖片。人們可能覺察不出明顯的差異,但是機器人閱讀這些圖片會非常困難,這種方法可以防止多數垃圾郵件發送器輕易地獲取你的郵箱地址。

當然,驗證碼(CAPTCHA)就利用了這種人類用戶可以正常讀取但是大多數機器人都無法讀取的圖片。驗證碼的讀取難度不同,有些驗證碼比其他的更加難讀,後面會介紹這個問題。

但是,驗證碼並不是網絡爬蟲抓取數據時需要進行圖像轉文字工作的唯一對象。即便是今天,仍然有很多文檔是掃描後直接放到網上的,它們無法直接使用,儘管「近在眼前」。如果無法將圖像轉為文字,要想使用這些文檔的內容,就只能人工手敲了,可沒人願意花時間幹這事兒。

相關焦點

  • python爬蟲-- Scrapy入門
    準備寫一個系列的Scrapy爬蟲教程,一方面通過輸出鞏固和梳理自己這段時間學到的知識,另一方面當初受惠於別人的博客教程,我也想通過這個系列教程幫助一些想要學習Scrapy的人。Scrapy簡介Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
  • scrapy爬蟲框架的運用
    # scrapy# 爬蟲框架- 框架- 爬蟲框架- scrapy- pyspider- crawley- scrapy框架介紹- https://doc.scrapy.org/en/latest/- http://scrapy-chs.readthedocs.io
  • 使用Scrapy網絡爬蟲框架小試牛刀
    前言這次咱們來玩一個在Python中很牛叉的爬蟲框架——Scrapy。scrapy 介紹標準介紹Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高性能異步下載,隊列,分布式,解析,持久化等)的具有很強通用性的項目模板。
  • 【Scrapy】走進成熟的爬蟲框架
    簡單來說,Scrapy是一個中大型的爬蟲框架,框架的意義就在於幫你預設好了很多可以用的東西,讓你可以從複雜的數據流和底層控制中抽離出來,專心於頁面的解析即可完成中大項目爬蟲,甚至是分布式爬蟲。但是爬蟲入門是不推薦直接從框架入手的,直接從框架入手會讓你頭暈目眩,覺得哪兒哪兒都看不懂,有點類似於還沒學會基礎的遣詞造句就直接套用模板寫成文章,自然是十分吃力的。
  • 手把手:教你用Scrapy建立你自己的數據集(附視頻)
    數據科學中,數據的爬取和收集是非常重要的一個部分。本文將以眾籌網站FundRazr為例,手把手教你如何從零開始,使用Python中非常簡便易學的Scrapy庫來爬取網絡數據。用Python進行網頁爬取當我開始工作時,我很快意識到有時你必須收集、組織和清理數據。
  • 第76天:Scrapy 模擬登陸
    想爬取網站數據?先登錄網站!對於大多數大型網站來說,想要爬取他們的數據,第一道門檻就是登錄網站。下面請跟隨我的步伐來學習如何模擬登陸網站。為什麼進行模擬登陸?網際網路上的網站分兩種:需要登錄和不需要登錄。(這是一句廢話!)那麼,對於不需要登錄的網站,我們直接獲取數據即可,簡單省事。
  • Scrapy爬蟲框架結構介紹(各部分組件功能,常用命令)
    提取有用的數據或者進行下一步的抓取,或者將數據結構化給pipeline。爬蟲(Spiders):爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出連結(new_url),讓Scrapy繼續抓取下一個頁面。
  • 獨家 | 教你用Scrapy建立你自己的數據集(附視頻)
    本文將以眾籌網站FundRazr為例,手把手教你如何從零開始,使用Python中非常簡便易學的Scrapy庫來爬取網絡數據。用Python進行網頁爬取當我開始工作時,我很快意識到有時你必須收集、組織和清理數據。 本教程中,我們將收集一個名為FundRazr(https://fundrazr.com/)的眾籌網站的數據。
  • 小叮噹高級爬蟲(二):Scrapy創建項目「五部曲」獲取豆瓣電影信息
    在這炎炎夏季,當你百無聊賴時,在這「枯藤老樹昏鴉,空調wifi西瓜」的閒暇時刻,你是否也是「夕陽西下,就往沙發上一趴」?何不看一部電影?放鬆一下我們疲勞已久的神經。當然是不用,下面,小叮噹就為大家分享,如何使用Python中的Scrapy框架,來獲取豆瓣的電影信息。還不了解Scrapy的夥伴們,可以去看下「小叮噹高級爬蟲(一):爬蟲利器Scrapy」。
  • Scrapy源碼剖析:Scrapy是如何運行起來的?
    在上篇文章:Scrapy 源碼剖析:架構概覽,我們主要從整體上了解了 Scrapy 的架構和數據流轉,並沒有深入分析每個模塊。從這篇文章開始,我將帶你詳細剖析 Scrapy 的運行原理。這篇文章,我們先從最基礎的運行入口來講,來看一下 Scrapy 究竟是如何運行起來的。scrapy 命令從哪來?當我們基於 Scrapy 寫好一個爬蟲後,想要把我們的爬蟲運行起來,怎麼做?
  • scrapy中最為重要的兩個對象Request、Response
    FormRequest對象FormRequest類擴展了Request具有處理HTML表單的功能的基礎。它使用lxml.html表單 從Response對象的表單數據預填充表單欄位。class scrapy.http.FormRequest(url[, formdata, ...])本FormRequest類增加了新的構造函數的參數。
  • python scrapy框架爬蟲當當網
    最近在複習scrapy框架,就隨便找了個網站做了一下爬蟲,當當網,說實話這種網站還是比較好做爬蟲的,我沒加代理,也沒限速,沒寫多線程,就直接搞下來了,
  • 爬蟲大殺器 | Python學習之Scrapy-Redis實戰京東圖書
    redis-based components for scrapyscrapy-Redis就是結合了分布式資料庫redis,重寫了scrapy一些比較關鍵的代碼,將scrapy變成一個可以在多個主機上同時運行的分布式爬蟲。
  • 第7天|10天搞定Python網絡爬蟲,Scrapy爬更快
    說了好幾天用requests進行網絡爬蟲編程了,是時候換成專業,高效率的爬蟲庫--Scrapy了。我之所以一開始用requests,就想告訴你,網絡爬蟲,方法挺多的,合適就行。還有在之前說的各種解析庫,在Scrapy中,也會經常用到,特別是Lxml的XPath。如果之前不說,留到現在還得說。
  • Scrapy源碼剖析:Scrapy有哪些核心組件?
    細心的你可能會發現,默認定義的這些隊列結構都是後進先出的,什麼意思呢?也就是在運行我們的爬蟲代碼時,如果生成一個抓取任務,放入到任務隊列中,那麼下次抓取就會從任務隊列中先獲取到這個任務,優先執行。這麼實現意味什麼呢?其實意味著:Scrapy 默認的採集規則是深度優先!如
  • 大數據開發神器——Scrapy Spider框架
    說到Python,估計很多同學跟我一樣都是從學習Python的爬蟲開始的。當然你可以使用lxml、BeautifulSoup、Request等第三方庫來編寫自己的爬蟲。但是當需要爬取海量數據,特別是大數據的實際應用中,若自己編寫爬蟲,是一件特別困難的事情。
  • Python程式語言:如何建立爬蟲框架
    這篇文章小編要和大家分享的知識是爬蟲框架,以及小編對學習它的感悟!如何建立爬蟲框架,這很重要,就像我們蓋房子需要基石一樣!才能蓋起摩天大樓,讓我們學習Python語言的路,走得更遠!路漫漫其修遠兮,吾將上下而求索!
  • 推薦一條高效的Python爬蟲學習路徑!
    1.學習Python包並實現基本的爬蟲過程2.掌握各種技巧,應對特殊網站的反爬措施3.學習scrapy,搭建工程化爬蟲4.學習資料庫知識,應對大規模數據存儲與提取5.分布式爬蟲,實現大規模並發採集scrapy 是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。學會 scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。
  • 使用 Scrapy 快速抓取網頁
    通過 Scrapy,眾多 Spider 類定義了應該如何抓取一個網頁,包括連結追蹤以及如何提取這些連結中的數據。scrapy.cfg 是修改默認配置的文件。這個例子中,我們將從一個虛擬的電子商務網站上抓取單個產品。下面是我們要抓取的第一個產品:
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    scrapy框架及案例 21數據分析 22機器學習 23深度學習 24數據結構和算法 25python網絡爬蟲 26機器學習入門篇 27機器學習入門篇2 28機器學習提升篇 29數據挖掘篇 30深度學習必備原理與實戰 31深度學習必備原理與實戰2