欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python使用scrapy自動爬取多個網頁

系統 2127 0

前面介紹的scrapy爬蟲只能爬取單個網頁。如果我們想爬取多個網頁。比如網上的小說該如何如何操作呢。比如下面的這樣的結構。是小說的第一篇。可以點擊返回目錄還是下一頁

對應的網頁代碼:

我們再看進入后面章節的網頁,可以看到增加了上一頁

對應的網頁代碼:

通過對比上面的網頁代碼可以看到. 上一頁,目錄,下一頁的網頁代碼都在

下的 元素的href里面。不同的是第一章只有2個 元素,從二章開始就有3個 元素。因此我們可以通過
元素的個數來判決是否含有上一頁和下一頁的頁面。代碼如下

最終得到生成的網頁鏈接。并調用Request重新申請這個網頁的數據

那么在pipelines.py的文件中。我們同樣需要修改下存儲的代碼。如下。可以看到在這里就不是用json. 而是直接打開txt文件進行存儲

python使用scrapy自動爬取多個網頁_第1張圖片

完整的代碼如下:在這里需要注意兩次yield的用法。第一次yield后會自動轉到Test1Pipeline中進行數據存儲,存儲完以后再進行下一次網頁的獲取。然后通過Request獲取下一次網頁的內容

python使用scrapy自動爬取多個網頁_第2張圖片

對于自動爬取網頁scrapy有個更方便的方法:CrawlSpider

前面介紹到的Spider中只能解析在start_urls中的網頁。雖然在上一章也實現了自動爬取的規則。但略顯負責。在scrapy中可以用CrawlSpider來進行網頁的自動爬取。

爬取的規則原型如下:

class scrapy.contrib.spiders.Rule (link_extractor,?callback=None,?cb_kwargs=None,?follow=None,process_links=None,?process_request=None)

LinkExtractor.:它的作用是定義了如何從爬取到的的頁面中提取鏈接

Callback指向一個調用函數,每當從LinkExtractor獲取到鏈接時將調用該函數進行處理,該回調函數接受一個response作為第一個參數。注意:在用CrawlSpider的時候禁止用parse作為回調函數。因為CrawlSpider使用parse方法來實現邏輯,因此如果使用parse函數將會導致調用失敗

Follow是一個判斷值,用來指示從response中提取的鏈接是否需要跟進

在scrapy shell中提取www.sina.com.cn為例

LinkExtractor中的allow只針對href屬性:

例如下面的鏈接只針對href屬性做正則表達式提取

結構如下:可以得到各個鏈接。

可以通過restrict_xpaths對各個鏈接加以限制,如下的方法:

實例2:還是以之前的迅讀網為例

提取網頁中的下一節的地址:

網頁地址:

http://www.xunread.com/article/8c39f5a0-ca54-44d7-86cc-148eee4d6615/1.shtml

?下一頁的的相對URL地址為2.shtml。

通過如下規則提取出來

>>> item=LinkExtractor(allow=('\d\.shtml')).extract_links(response)

>>> for i in item:

...?? print i.ur

...

http://www.xunread.com/article/8c39f5a0-ca54-44d7-86cc-148eee4d6615/2.shtml

也通過導航頁面直接獲取所有章節的鏈接:

C:\Users\Administrator>scrapy shell http://www.xunread.com/article/8c39f5a0-ca54

-44d7-86cc-148eee4d6615/index.shtml

?

from scrapy.linkextractors import LinkExtractor

?

>>> item=LinkExtractor(allow=('\d\.shtml')).extract_links(response)

>>> for i in item:

...?? print i.url

得到如下全部的鏈接

那么接下來構造在scrapy中的代碼,如下

python使用scrapy自動爬取多個網頁_第3張圖片

關鍵的是rules=(Rule(LinkExtractor(allow=( '\d\.shtml' )),callback= 'parse_item' ,follow=True),) 這個里面規定了提取網頁的規則。以上面的例子為例。爬取的過程分為如下幾個步驟:

1 從 http://www.xunsee.com/article/8c39f5a0-ca54-44d7-86cc-148eee4d6615/1.shtml 開始,第一調用parse_item ,用xpath 提取網頁內容,然后用Rule 提取網頁規則,在這里提取到2.shtml

2? 進入2.shtml.進入2.shtml 后再重復運行第一步的過程。直到Rules 中提取不到任何規則

我們也可以做一下優化,設置start_urls 為頁面索引頁面

http://www.xunsee.com/article/8c39f5a0-ca54-44d7-86cc-148eee4d6615/index.shtml

這樣通過Rule 可以一下提取出所有的鏈接。然后對每個鏈接調用parse_item 進行網頁信息提取。這樣的效率比從1.shtml 要高效很多。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲a级大片 | 91探花视频在线观看 | 成人嗯啊视频在线观看 | 色播放| 日本成熟视频tube~be | 精品国产九九 | 精品亚洲成a人片在线观看 在线看片h站 | 人人曰 | 日日夜夜爱 | 国产一有一级毛片视频 | 亚洲欧美精品一区二区 | 国产精品久久久久一区二区 | 日本高清午夜色wwwσ | 婷婷资源| 亚洲精品午夜视频 | 亚洲精品一区二区三区在线观看 | 99视频观看 | 亚洲一区在线观看视频 | 精品国产不卡一区二区三区 | 午夜电影剧场 | 日本成人一区二区三区 | 夜夜操免费视频 | 日韩视频不卡 | 精品久久久久一区二区三区 | 欧美级 | 久久色播 | 亚洲精品免费观看 | 国产精品岛国久久久久久 | 九九视频在线观看 | 国产精品亚洲va在线观看 | 国产精品中文字幕在线 | 日日狠狠的日日日日 | 麻豆一区二区99久久久久 | 狠狠操操 | 亚洲人xxxx | 国产精品美女久久久久久 | 久久精品久久精品 | www.久久精品| 成年人看的羞羞网站 | 亚洲日本va在线视频观看 | 黄色免费av |