爬蟲過程當中間遇到的那些坑

  1. fake-useragent請求知乎的坑

  • 在用scrapy爬取知乎的時候,用fake-useragent模塊隨機添加請求頭的時候發現知乎跳轉到一個提示瀏覽器版本太低的網頁。
  1. 用fake-useragent添加請求頭請求別的網站的時候都沒有出現過這種問題。
  2. 我將請求頭換成本身使用的chroem瀏覽器的請求頭的時候,沒有異常。
  3. 我又用fake-useragent從新請求,發現也沒有異常。
  4. 再次用fake-useragent從新請求,又跳轉到一個提示瀏覽器版本太低的網頁。

  我百思不得其解,本身思考以下:綜合一、3,說明fake-useragent應該沒問題的,綜合三、4我懷疑這是知乎使用的一種反爬機制,故意將錯誤引到瀏覽器版本太低的網頁,但實際問題並不在此,在這中間花了整整半天時間,後面我又想到用個人另一臺電腦,而後將瀏覽器的useragent發送過來,而後使用發送過來的useragent從新請求知乎,發現並無異常。因而猛然想到fake-useragent中的useragent是隨機提取出來的,是否是有的提取出來的useragent是比較老舊的,因此知乎識別處理啊,致使出現異常呢?爲了驗證本身的想法,我又用fake-useragent隨機提取的useragent反覆請求,有的能成功,有的提示瀏覽器版本低的異常,遂驗證了個人想法。shell

  綜上:知乎是一個對瀏覽器版本要求很高的網站,不少舊版的瀏覽器都不能訪問知乎,而fake-useragent內的請求頭數據並無一直更新到最新,只能測試多個,而後選擇可用的便可。瀏覽器

 

scrapy shell 添加 user-gent的坑

  • 在用scrapy shell -s USER_AGENT=‘Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/60.0‘ +請求網址  的時候報一些異常的錯誤,發現這個是因爲本身平時引號都用單引號,可是此處的Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/60.0必需要用雙引號括起來才行!

requests請求user-gent的坑

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/60.0'}
re = requests.get(url, headers=headers) re.encoding = re.apparent_encoding print(re.text)

報錯以下:app

UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 30: ordinal not in range(256)

此錯誤看着是編碼錯誤,實際上不是,我換一個user-agent又能夠了,其實這是由於瀏覽器在顯示User-Agent屬性時,應爲屬性值過長,因此使用了省略號,致使添加過程當中形成了編譯錯誤。scrapy

方法策略:若是scrapy中有多個item的時候,該如何將不一樣的item在pipeline中做不一樣的處理呢?

  1. item.__class__.__name__ == 'item 的名字'
  2. 在各自定義的item中間添加inser方法。
相關文章
相關標籤/搜索