怪不得你的爬蟲一頁數據都抓不到,原來是忽視了這一點

2021-01-13 python碼神

大家好,今天小編又和大家見面了,我是團隊中的python高級研發工程師,日常工作是開發python代碼;偶爾還要來平臺寫寫文章;最近老闆又給我安排一個活:幫助粉絲解決各種技術問題。

是的,朋友們如果在做項目或者寫代碼的過程中遇到了問題,歡迎私信小編,小編每天都會抽出一定的時間來幫忙解決粉絲朋友們的問題。此外,朋友們還可以私信來索取精美簡歷模板哦。

問題描述

今天這位朋友的問題是,他在window7下面,使用python3.7和scrapy框架抓取百度圖片。由於使用了框架,所以程序很快就開發好了,但是啟動爬蟲之後,發現連第一頁數據都抓取不到,爬蟲就退出了。

由於scrapy框架列印了近百行的錯誤輸出,所以很難定位問題。這位朋友反覆檢查了幾次代碼,又在chrome瀏覽器裡面重新抓包,都找不出來問題的原因所在。

甚至他還用php代碼模擬了scrapy中類似的抓取功能,發現抓取百度圖片的功能代碼運行起來非常的正常。從直覺出發,看來問題還是出在scrapy框架裡面。

問題定位

小編向這位朋友索要了代碼,然後在自己的開發機裡面嘗試運行了一下,也是同樣的結果,抓第一頁數據的時候,爬蟲就出錯退出了。

通過仔細觀察日誌,小編在近百行的出錯日誌裡面很敏捷地就發現了幾個關鍵詞: Forbidden by robots.txt,翻譯成中文,就是「robots.txt禁止爬蟲抓取」。

問題原理

小編又仔細地觀察了一下爬蟲的debug日誌,發現一個規律:爬蟲在請求我們設定的url之前,它會先向伺服器根目錄請求一個txt文件,也就是robots.txt。

robots.txt文件是一個文本文件,使用任何一個常見的文本編輯器,比如Windows系統自帶的記事本,就可以創建和編輯它,它是搜尋引擎訪問網站的時候要查看的第一個文件,它會告訴蜘蛛程序在伺服器上什麼文件是可以被查看的、什麼文件是不允許被查看(抓取)的。

當一個搜索蜘蛛訪問一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,如果存在,搜索機器人就會按照該文件中的內容來確定訪問的範圍;如果該文件不存在,所有的搜索蜘蛛將能夠訪問網站上所有沒有被口令保護的頁面。

Robots協議用來告知搜尋引擎哪些頁面能被抓取,哪些頁面不能被抓取;可以用來屏蔽一些網站中比較大的文件,如:圖片,音樂,視頻等,節省伺服器帶寬;或者屏蔽站點的一些死連結。也可以方便搜尋引擎抓取網站內容;設置網站地圖連接,方便引導蜘蛛爬取頁面。

因為默認scrapy遵守robots.txt中的協議,所以會先請求這個文件查看自己的權限,而我們現在訪問這個robots.txt得到:

User-agent: * Disallow: /

意思是不允許任何的爬蟲抓取任何的頁面,於是scrapy框架就停止了後續的url請求和頁面解析。

這也就解釋了為何用php寫的代碼抓取起來就非常的正常,因為php並沒有去預先請求robots.txt。

問題解決

知道了問題的原理,解決起來就很順手了:只要讓scrapy框架不去請求robots.txt就可以了。

翻了翻scrapy的官方文檔,很容易就找到了解決辦法:

settings.py中把ROBOTSTXT_OBEY從True改成False就可以了。 撒花。

總結與收穫

遇到問題一定要仔細看日誌!多看多想。另外,如果有時間,多翻翻官方文檔也是很不錯的。

相關焦點

  • 數據從業者必讀:抓取了一千億個網頁後我才明白,爬蟲一點都不簡單
    由於時間通常是限制因素,規模抓取要求你的爬蟲要以很高的速度抓取網頁但又不能拖累數據質量。對速度的這張要求使得爬取大規模產品數據變得極具挑戰性。挑戰#1——草率而且總是在變的網站格式這一點很明顯但也許不是最性感的挑戰,但是草率而一直在變的網站格式是目前為止你在規模析取數據時將會面臨的最大挑戰。這未必是因為任務的複雜性,而是由於你要投入的時間和資源。
  • Python數據科學實踐 | 爬蟲1
    大家好,基於Python的數據科學實踐課程又到來了,大家盡情學習吧。本期內容主要由智億同學與政委聯合推出。前面幾章大家學習了如何利用Python處理與清洗數據,如何探索性數據分析,以及如何利用統計與機器學習方法進行建模。但是,很明顯我們忽視了一個最原始的問題:數據從何而來。沒有數據,這就好比,你學了十八般武藝,可是沒有讓你施展的地方一樣難受。
  • 成為一個爬蟲工程師,都需要學習那些知識?
    一種辦法就是去剖析網站的 JavaScript 邏輯,死磕代碼邏輯,分析出各個參數含義,梳理出思路,再用爬蟲模仿重寫就行了。假如你解出來了,那麼直接模仿的方式獲取數據的效率會極高。當然,這就需要你會一些 JavaScript 知識了,當然有些網站加密邏輯做的太牛逼了。有時,你可能花一個星期也解不出來,最後還是放棄了。
  • 只因寫了一段爬蟲,大數據公司200多人被抓!
    不管這件事如何收尾,對這名程式設計師和他的家庭都是一個很大的打擊。 程序運行了一段時間後,也許是有了新的需求,也許是小明想對爬蟲程序進行進一步的優化,將爬蟲的線程數,由原來比較小的值調到一個比較大的值。 完善後的程序上傳到伺服器後,小明跟蹤了下爬蟲的進展,運行平穩並且速度快了很多。提交之後像往常一樣,小明就把這件事情忘了。
  • 一分鐘教你用Excel從統計局抓數據!
    首先聲明,我並沒有學過HTML的語言,也沒學過VBA,所以自己解釋的邏輯應該是非常容易理解的,保證沒有任何編程基礎的都能學會。當然前提是你有Excel,沒有的話出門右轉有盜版。文中的方法其實完全不限於抓取統計局的數據,任何網站都可以想抓就抓,簡直如若出入無人之境。(文末有彩蛋喲!)好了,Let's rock!
  • 一段爬蟲引起的風暴,大數據公司史上最大「危機」
    最近一段時間有關大數據的話題可謂是熱火朝天,要知道大數據作為一項切實改變著我們生活的技術,雖然給我們的生活帶來了不少便利,但也讓我們的隱私蕩然無存。不過最近的數據圈子並不太平,準確一點的說,是爬蟲圈不太平,甚至可以說是迎來了中國爬蟲圈的最大風暴。
  • Python網絡爬蟲教程+數據分析+機器學習
    : 程式設計師小樂 舉報   前段時間,小夥伴多次在後臺留言詢問Python爬蟲教程
  • 寫網絡爬蟲程序的難度是怎麼分等級的
    一個有用的爬蟲,只需兩個詞來衡量: 數量:能否抓全所有該類數據 效率:抓完所有數據需要多久一天還是一個月 但要做到這兩個詞,卻是要下很多功夫。自己下功夫是一方面,也很重要的是你要抓全的目標網站給你出了多少難題。綜合起來,就寫一個爬蟲有多少難度。
  • 怪不得都說,銅火鍋才是最好吃的,原來還有這吃法,可惜吃不到了
    怪不得都說,銅火鍋才是最好吃的,原來還有這吃法,可惜吃不到了!相信很多人都喜歡吃火鍋,尤其是四川人,恨不得一天三頓都吃火鍋,如果不是怕上火的話,估計真的會有人這樣做,因為火鍋實在是太好吃了,我們現在吃的火鍋,一般都是那種大鍋式的,不過在很早之前,有一種火鍋是非常流行的,就是銅火鍋,尤其是北京,這種火鍋特別多,很多人都說,現在的火鍋都比不上銅火鍋,之前還一直不了解,後來朋友的一種吃法,我才了解到,怪不得都說銅火鍋才是最好吃的
  • 我就想寫個爬蟲,到底要學多少東西啊?
    但速度提上來了不一定是好事,反爬接著肯定就要來了,封你 IP、封你帳號、彈驗證碼、返回假數據,所以有時候龜速爬似乎也是個解決辦法?分布式多線程、多進程、協程都能加速,但終究還是單機的爬蟲。要真正做到規模化,還得來靠分布式爬蟲來搞。分布式的核心是什麼?資源共享。比如爬取隊列共享、去重指紋共享等等。
  • 就想寫個爬蟲,我到底要學多少東西啊?
    到這裡,你就說你會爬蟲了嗎?不,還差的遠呢。Ajax、動態渲染隨著網際網路的發展,前端技術也在不斷變化,數據的加載方式也不再是單純的服務端渲染了。現在你可以看到很多網站的數據可能都是通過接口的形式傳輸的,或者即使不是接口那也是一些 JSON 的數據,然後經過 JavaScript 渲染得出來的。
  • Python新手都可以做的爬蟲,抓取網上 OJ 題庫信息
    最近有朋友在做 OJ 題庫,順手做個小爬蟲,導出一份題庫列表來看看!目標:浙江大學題庫工具:python3.6,requests 庫、lxml 庫、pycharm思路:先找到網頁中題庫所在的位置然後我們點擊第一頁和後面幾頁,看看 url 的變化發現規律了嗎?
  • Python爬蟲框架:scrapy爬取知乎數據
    測試爬蟲效果我這裡先寫一個簡單的爬蟲,爬取用戶的關注人數和粉絲數,代碼如下:import scrapyclass ZhuHuSpider(scrapy.Spider): """ 知乎爬蟲 """ name = 'zhuhu' allowed_domains = ['zhihu.com'] start_urls
  • 網絡爬蟲(一)基礎知識
    有句話是這麼說的,比你自己更了解你的是大數據。其實說到大數據,就不得不提大數據「繭房」,大數據雖然能夠給我們提供更多的便利,但一定程度上它也限制了我們獲取知識的寬度,像一個繭一樣,把我們包裹在自己想要了解的地方,對於「繭」外的東西一概不知。
  • 用案例讓你一文搞懂python網絡爬蟲
    很久以前寫了一篇爬蟲的文章,把它放在CSDN上(livan1234)沒想到點擊量竟然暴漲,足以看到大家在數據獲取方面的需求,爬蟲技術現在已經非常普遍,其用途也非常廣泛,很多牛人在各個領域做過相關的嘗試,比如: 1)爬取汽車之家數據,利用論壇發言的抓取以及NLP,對各種車型的車主做畫像。
  • 實戰|Python輕鬆實現動態網頁爬蟲(附詳細源碼)
    事情是這樣的,前幾天我公眾號寫了篇爬蟲入門的實戰文章,叫做《實戰|手把手教你用Python爬蟲(附詳細源碼)》。發出去不到一天,一名從業10年的王律師找到了我,我雖然同意了他的微信申請,但內心是按奈不住的慌張。簡單交流了下,原來他在自學爬蟲,但他發現翻頁的時候,url一直不變。
  • 知名數據公司被查,你的爬蟲會送老闆進監獄嗎?
    爬蟲的發展歷史可以追溯到 20 年前,搜尋引擎、聚合導航、數據分析、人工智慧等業務,都需要基於爬蟲技術。但是爬蟲作為獲取數據的技術手段之一,由於部分數據存在敏感性,如果不能甄別哪些數據是可以爬取,哪些會觸及紅線,可能下一位上新聞的主角就是你。
  • 了解入門爬蟲技術原理,看這篇就夠了
    爬蟲技術就是一個高效的下載系統,能夠將海量的網頁數據傳送到本地,在本地形成網際網路網頁的鏡像備份。本文從爬蟲技術的誕生開始,為你詳細解析爬蟲技術原理。如此這般,形成循環,直到待抓取URL隊列為空,這代表著爬蟲系統將能夠抓取的網頁已經悉數抓完,此時完成了一輪完整的抓取過程。
  • 「爬蟲」相關罪名分析(上篇)——「爬蟲」犯了什麼罪?
    在這篇文章出來之前,已經有多家做「數據」的公司被調查處理:其中包括:1、該文章所涉的公司「巧達科技」,該公司號稱是中國最大的用戶畫像關鍵數據服務提供商,專注於大數據及人工智慧領域前瞻性產品研發,客戶覆蓋網際網路行業及泛金融領域。
  • R語言爬蟲系列6|動態數據抓取範例
    R雖然是以一門統計分析工具出現在大多數人印象中的,但其畢竟本質上是一門程式語言,對於爬蟲的支持雖不如Python那樣多快好省,但悉心研究一下總能做出一些讓你驚喜的效果。 大約很早之前,小編就寫過關於R語言爬蟲新貴rvest的抓取介紹,之前說rvest+SelectGadgetor是結構化網頁抓取的實戰利器,大家的溢美之詞不斷。