scrapy實踐之翻頁爬取的實現(xiàn)
安裝
Scrapy的安裝很簡單,官方文檔也有詳細的說明 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html 。這里不詳細說明了。
在scrapy框架中,spider具有以下幾個功能
1. 定義初始爬取的url
2. 定義爬取的行為,是否跟進鏈接
3. 從網頁中提取結構化數據
所謂的跟進鏈接,其實就是自動爬取該頁的所有鏈接,然后順著對應的鏈接延伸開來不斷爬取,這樣只需要提供一個網站首頁,理論上就可以實現(xiàn)網站全部頁面的爬取,實現(xiàn)點到面的功能。
如果自己來開發(fā),不僅需要在算法層面,考慮是使用深度優(yōu)先還是廣度優(yōu)先,還需要處理好提取的url的限制條件等細節(jié)工作。在scrapy中,開發(fā)過程被大大簡化了,我們只需要定義以下幾個關鍵部分的代碼,就可以實現(xiàn)翻頁效果。
1. Spider
核心思想是在parse方法中,返回新的Requests請求,代碼如下
import scrapy
from hello_world.items import HelloWorldItem
class MirSpider(scrapy.Spider):
name = "MirSpider"
start_urls = ["http://mirtarbase.cuhk.edu.cn/php/search.php?opt=species&org=bta&sort=id&order=asc&page=1"]
def parse(self, response):
domain = 'http://mirtarbase.cuhk.edu.cn'
for row in response.xpath('//table/tr'):
item = HelloWorldItem()
res = []
for col in (row.xpath('td/text()')):
res.append(col.extract())
if res[0] != 'Bos taurus':
continue
item['species'] = res[0]
item['miRNA'] = res[2]
item['target'] = res[3]
item['total'] = res[4]
item['papers'] = res[5]
yield item
for url in response.xpath('//a/@href').extract():
if 'page' in url:
url = domain + url
yield scrapy.Request(url, callback = self.parse, dont_filter = False)
關鍵代碼是最后幾行的for循環(huán),在start_urls中,我們只提供了一個初識的url, 在parse方法中,除了常規(guī)的返回結構性數據item外,我們還返回了新的requests請求,首先提取頁面上所有的url, 并對url的鏈接進行了限制,對需要爬取的url鏈接以Request的方法進行返回,注意dont_filter的設置,當設置為False時,會調用scrapy默認的url去重機制,這樣不會重復下載。
2. Item Pipeline
對于下載的item, 有些會出現(xiàn)重復的現(xiàn)象,此時可以在pipelines.py中,對item進行操作,實現(xiàn)item去重的代碼如下
from itemadapter import ItemAdapter
class HelloWorldPipeline:
def __init__(self):
self.link_set = set()
def process_item(self, item, spider):
link = item['miRNA'] + item['target']
if link in self.link_set:
raise DropItem(item)
self.link_set.add(link)
return item
在process_item方法中,通過一個set對象來達到去重的效果。需要注意,默認pipelines是沒有開啟的,編寫完代碼之后,需要在settings.py中進行配置,開啟對應的pipeline, 內容如下
ITEM_PIPELINES = {
'hello_world.pipelines.HelloWorldPipeline': 300,
}
對于標準的多頁表格數據,采用上述的代碼可以輕松實現(xiàn)翻頁效果,非常的方便。
到此這篇關于scrapy實踐之翻頁爬取的實現(xiàn)的文章就介紹到這了,更多相關scrapy 翻頁爬取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

