国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

scrapy爬蟲使用總結(jié)——技巧和天坑

vvpvvp / 2826人閱讀

摘要:簡介爬蟲這個東西我就不多做介紹了,總之是一個很好用的爬蟲庫,且關于也有較多的教程。這篇文章記錄一下我個人的項目規(guī)劃和天坑心得。然后執(zhí)行就會自動去爬數(shù)據(jù)了。常用配置這里要結(jié)合一些原因來進行說明。

簡介

scrapy爬蟲這個東西我就不多做介紹了,總之是一個很好用的Python爬蟲庫,且關于scrapy也有較多的教程。這篇文章記錄一下我個人的項目規(guī)劃和天坑心得。

通常來說,我們執(zhí)行了scrapy startproject example后就會創(chuàng)建這樣的一個文件結(jié)構(gòu),大致如下:

├── example
│?? ├── __init__.py
│?? ├── __pycache__
│?? ├── items.py
│?? ├── middlewares.py
│?? ├── pipelines.py
│?? ├── settings.py
│?? └── spiders
│??     ├── __init__.py
│??     └── __pycache__
└── scrapy.cfg

我們通常寫爬蟲都是在spiders里寫爬蟲解析規(guī)則,以及編寫數(shù)據(jù)存儲程序。

基礎spider

我們首先來看爬蟲程序,最基本是以下這個樣子:

import scrapy
from sqlalchemy import distinct

class ExampleSpider(scrapy.Spider):
    name = "example_spider"
    allowed_domains = []
    start_urls = [
            "https://www.example.com"
        ]
    def parse(self,response):
        pass

這樣的一個基本爬蟲,只要配置好start_urls,在這里寫上我們想要去爬的URL,可以編寫很多個,start_urls是一個數(shù)組。然后執(zhí)行scrapy crawl example_spider就會自動去爬數(shù)據(jù)了。這里的parse方法是繼承父類scrapy.Spider的解析方法,此處沒有做任何結(jié)果解析以及存儲。

在這個地方,其實我們要注意一點是,ExampleSpider這個類名我們可以瞎姬霸命名,我們在調(diào)用scrapy crawl [爬蟲名]的時候,這個爬蟲名是根據(jù)這個類里的name屬性來的,此處的nameexample_spider,所以我們在執(zhí)行的時候就是:scrapy crawl example_spider。當然在具體的編寫過程中我個人建議是不要瞎姬霸命名,按照業(yè)務邏輯來。

再回頭看我上面所展示的文件夾結(jié)構(gòu),隨著業(yè)務的增長,我們很可能編寫個成百上千的爬蟲,那么每個爬蟲都放到spiders一個文件夾里的話,要理清的話就要花大力氣了,而實際上,在spiders其實可以創(chuàng)建任意的子文件夾進行邏輯上的分類,執(zhí)行crawl的時候,會自動去遍歷路徑找到我們制定的爬蟲,至于你編寫了哪些爬蟲,同樣可以通過crapy list列出來。

分頁爬技巧

分頁爬蟲技巧,其實在搜索引擎上都能找到,而且在segmentfault上都能搜到相應的解答,主要就在parse方法中判斷條件或者說找到下一頁的URL,然后用協(xié)程yield一下scrapy.Request就可以了,也就是用協(xié)程方式手動執(zhí)行一下scrapy的Request方法,對于Request具體的返回,我沒有深入看源代碼研究,大概是在scrapy的底層再次做了一定的處理,實際的請求并不是Request類發(fā)起的。

常用配置

這里要結(jié)合一些原因來進行說明。

通常來說,移動端的數(shù)據(jù)更好爬,我們可以用chrome的開發(fā)者工具模擬移動端瀏覽器,然后看移動端的數(shù)據(jù)交互形式以及移動端HTML數(shù)據(jù)格式。

另外就是我們爬的時候通常為了防止被封IP,不能太頻繁,一般是間隔1s鐘去取一次數(shù)據(jù)這樣子。

所以從上面兩方面來說,我們在自己寫的爬蟲類中加上一個類屬性download_delay,如

import scrapy
from sqlalchemy import distinct

class ExampleSpider(scrapy.Spider):
    download_delay = 1 # 1s鐘發(fā)起一次請求,當前爬蟲執(zhí)行過程中,對任何位置的Reqeust都有效
    name = "example_spider"
    allowed_domains = []
    start_urls = [
            "https://www.example.com"
        ]
    def parse(self,response):
        pass

另外就是在settings.py設置

DEFAULT_REQUEST_HEADERS = {
   "user-agent" : "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N)             AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3423.2 Mobile Safari/537.36"
}

一個這樣的header頭,模擬手機瀏覽器。

錯入日志的重要性

在做爬蟲的時候,非常重要的一點就是錯誤日志的記錄,通常來說我們在settings.py中配置以下兩個參數(shù):

LOG_LEVEL = "DEBUG"
LOG_FILE = "./log.log" # 錯誤日志記錄文件及路徑

通常來說,我們最好是把LOG_LEVEL設置為DEBUG,也就是說,我們把所有的調(diào)試信息都輸入到錯誤日志中進行記錄,方便檢查編寫爬蟲過程中可能出現(xiàn)的任何問題,盡可能的確保每個環(huán)節(jié)不出錯。

如果沒有意識到錯誤日志的重要性,在寫爬蟲的過程中只能抓瞎了,我是踩了好幾次大坑才有過這種覺悟。

數(shù)據(jù)存儲

數(shù)據(jù)存儲,我個人用的是sqlalchemy,是一個很強大的庫,我個人也做了些基礎的封裝,使用起來更方便。

數(shù)據(jù)存儲一方面可能是在parse方法中進行解析后處理,另外的話,parse可以進行統(tǒng)一解析,然后在close進行全部批量存儲,主要看具體的業(yè)務邏輯情況。

遇到過最坑爹的問題

最坑爹的問題就是要千萬保證數(shù)據(jù)來源性的可靠,一定要反復對比其來源數(shù)據(jù)是否有問題,不然出現(xiàn)我們所醫(yī)療之外的數(shù)據(jù)情況,很可能找不到原因。

舉個例子,我們在做分頁處理的時候,已經(jīng)到末尾頁了,通常就可以判定結(jié)束爬蟲了,但假設在某一個數(shù)據(jù)分類下,這個末尾頁其實有個鏈接指向了其他分類頁,然而在web瀏覽器中通過javascript程序禁止了跳轉(zhuǎn),然后就陷入了不斷循環(huán)的取數(shù)據(jù)的過程中或者重復取了數(shù)據(jù)。當然這個是一個不太可能存在的可能情況,不過我在編寫的過程中就遇到過類似的問題,在處理的時候千萬要保證數(shù)據(jù)解析和來源數(shù)據(jù)的可靠性,切記切記!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41859.html

相關文章

  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • 零基礎如何學爬蟲技術(shù)

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務,現(xiàn)整理出零基礎如何學爬蟲技術(shù)以供學習,。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務,服務范圍涵蓋社交網(wǎng)絡電子商務分類信息學術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務,現(xiàn)整理出零基礎如何學爬蟲技術(shù)以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...

    KunMinX 評論0 收藏0
  • SCrapy爬蟲大戰(zhàn)京東商城

    摘要:爬蟲大戰(zhàn)京東商城引言上一篇已經(jīng)講過怎樣獲取鏈接,怎樣獲得參數(shù)了,詳情請看爬取京東商城普通篇代碼詳解首先應該構(gòu)造請求,這里使用這個方法默認調(diào)用的是構(gòu)造請求,如果要改變默認的請求,那么必須重載該方法,這個方法的返回值必須是一個可迭代的對象,一般 SCrapy爬蟲大戰(zhàn)京東商城 引言 上一篇已經(jīng)講過怎樣獲取鏈接,怎樣獲得參數(shù)了,詳情請看python爬取京東商城普通篇 代碼詳解 首先應該構(gòu)造請求...

    noONE 評論0 收藏0
  • Python入門網(wǎng)絡爬蟲之精華版

    摘要:學習網(wǎng)絡爬蟲主要分個大的版塊抓取,分析,存儲另外,比較常用的爬蟲框架,這里最后也詳細介紹一下。網(wǎng)絡爬蟲要做的,簡單來說,就是實現(xiàn)瀏覽器的功能。 Python學習網(wǎng)絡爬蟲主要分3個大的版塊:抓取,分析,存儲 另外,比較常用的爬蟲框架Scrapy,這里最后也詳細介紹一下。 首先列舉一下本人總結(jié)的相關文章,這些覆蓋了入門網(wǎng)絡爬蟲需要的基本概念和技巧:寧哥的小站-網(wǎng)絡爬蟲,當我們在瀏覽器中輸入...

    Bmob 評論0 收藏0
  • 爬蟲爬 JSON HTML 數(shù)據(jù)

    摘要:最近這兩周在忙著給公司爬一點數(shù)據(jù),更文的速度有一點下降,預計今天就爬完了,總結(jié)總結(jié)經(jīng)驗。一個爬蟲的框架。基本等價于選擇其中的文字提取屬性文檔,這個我不會,我也沒看使用這個類庫解析如請求方式可以用來給中文字符數(shù)據(jù)放入傳遞即可。 最近這兩周在忙著給公司爬一點數(shù)據(jù),更文的速度有一點下降,預計今天就爬完了,總結(jié)總結(jié)經(jīng)驗。 其實之前我司是有專門做爬蟲的,不用前端這邊出人干活。后來那人離職了,有可...

    Hegel_Gu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<