亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

scrapy實(shí)踐之翻頁(yè)爬取的實(shí)現(xiàn)

 更新時(shí)間:2021年01月05日 09:38:04   作者:生信修煉手冊(cè)  
這篇文章主要介紹了scrapy實(shí)踐之翻頁(yè)爬取的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

安裝

Scrapy的安裝很簡(jiǎn)單,官方文檔也有詳細(xì)的說(shuō)明 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html 。這里不詳細(xì)說(shuō)明了。

在scrapy框架中,spider具有以下幾個(gè)功能

1. 定義初始爬取的url

2. 定義爬取的行為,是否跟進(jìn)鏈接

3. 從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)

所謂的跟進(jìn)鏈接,其實(shí)就是自動(dòng)爬取該頁(yè)的所有鏈接,然后順著對(duì)應(yīng)的鏈接延伸開(kāi)來(lái)不斷爬取,這樣只需要提供一個(gè)網(wǎng)站首頁(yè),理論上就可以實(shí)現(xiàn)網(wǎng)站全部頁(yè)面的爬取,實(shí)現(xiàn)點(diǎn)到面的功能。

如果自己來(lái)開(kāi)發(fā),不僅需要在算法層面,考慮是使用深度優(yōu)先還是廣度優(yōu)先,還需要處理好提取的url的限制條件等細(xì)節(jié)工作。在scrapy中,開(kāi)發(fā)過(guò)程被大大簡(jiǎn)化了,我們只需要定義以下幾個(gè)關(guān)鍵部分的代碼,就可以實(shí)現(xiàn)翻頁(yè)效果。

1. Spider

核心思想是在parse方法中,返回新的Requests請(qǐng)求,代碼如下

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)

關(guān)鍵代碼是最后幾行的for循環(huán),在start_urls中,我們只提供了一個(gè)初識(shí)的url, 在parse方法中,除了常規(guī)的返回結(jié)構(gòu)性數(shù)據(jù)item外,我們還返回了新的requests請(qǐng)求,首先提取頁(yè)面上所有的url, 并對(duì)url的鏈接進(jìn)行了限制,對(duì)需要爬取的url鏈接以Request的方法進(jìn)行返回,注意dont_filter的設(shè)置,當(dāng)設(shè)置為False時(shí),會(huì)調(diào)用scrapy默認(rèn)的url去重機(jī)制,這樣不會(huì)重復(fù)下載。

2. Item Pipeline

對(duì)于下載的item, 有些會(huì)出現(xiàn)重復(fù)的現(xiàn)象,此時(shí)可以在pipelines.py中,對(duì)item進(jìn)行操作,實(shí)現(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方法中,通過(guò)一個(gè)set對(duì)象來(lái)達(dá)到去重的效果。需要注意,默認(rèn)pipelines是沒(méi)有開(kāi)啟的,編寫(xiě)完代碼之后,需要在settings.py中進(jìn)行配置,開(kāi)啟對(duì)應(yīng)的pipeline, 內(nèi)容如下

ITEM_PIPELINES = {
  'hello_world.pipelines.HelloWorldPipeline': 300,
}

對(duì)于標(biāo)準(zhǔn)的多頁(yè)表格數(shù)據(jù),采用上述的代碼可以輕松實(shí)現(xiàn)翻頁(yè)效果,非常的方便。

到此這篇關(guān)于scrapy實(shí)踐之翻頁(yè)爬取的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)scrapy 翻頁(yè)爬取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Python腳本實(shí)現(xiàn)傳遞參數(shù)的三種方式分享

    利用Python腳本實(shí)現(xiàn)傳遞參數(shù)的三種方式分享

    使用python腳本傳遞參數(shù)在實(shí)際工作過(guò)程中還是比較常用。這篇文章為大家總結(jié)了三個(gè)常用的方式,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • 20招讓你的Python飛起來(lái)!

    20招讓你的Python飛起來(lái)!

    20招讓你的 Python飛起來(lái)!這篇文章主要為大家詳細(xì)介紹了Python性能優(yōu)化的20條建議,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解Python如何生成詞云的方法

    詳解Python如何生成詞云的方法

    這篇文章主要介紹了詳解Python如何生成詞云的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python實(shí)現(xiàn)屏保程序(適用于背單詞)

    python實(shí)現(xiàn)屏保程序(適用于背單詞)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)屏保程序,適用于背單詞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python基礎(chǔ)之?dāng)?shù)據(jù)類型相關(guān)知識(shí)總結(jié)

    Python基礎(chǔ)之?dāng)?shù)據(jù)類型相關(guān)知識(shí)總結(jié)

    眾所周知,在Python中,常用的數(shù)據(jù)類型有三種,分別是字符串、整數(shù)和浮點(diǎn)數(shù).在Python基礎(chǔ)學(xué)習(xí)的過(guò)程中,數(shù)據(jù)類型是初學(xué)者常常容易混淆的一個(gè)基礎(chǔ)知識(shí)點(diǎn),本文為大家詳細(xì)總結(jié)了三種數(shù)據(jù)類型的概念、數(shù)據(jù)類型的查詢以及更為復(fù)雜的數(shù)據(jù)轉(zhuǎn)化,需要的朋友可以參考下
    2021-06-06
  • Pycharm如何返回上一次編輯處的快捷鍵

    Pycharm如何返回上一次編輯處的快捷鍵

    這篇文章主要介紹了Pycharm如何返回上一次編輯處的快捷鍵問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python深拷貝與淺拷貝用法實(shí)例分析

    Python深拷貝與淺拷貝用法實(shí)例分析

    這篇文章主要介紹了Python深拷貝與淺拷貝用法,結(jié)合實(shí)例形式分析了Python對(duì)象的復(fù)制、深拷貝、淺拷貝等操作原理、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • Python隨機(jī)驗(yàn)證碼生成和join?字符串的問(wèn)題解析

    Python隨機(jī)驗(yàn)證碼生成和join?字符串的問(wèn)題解析

    Python中有join()和os.path.join()兩個(gè)函數(shù),join是將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個(gè)新的字符串而os.path.join():?將多個(gè)路徑組合后返回,本文給大家介紹的非常詳細(xì),需要的朋友一起看看吧
    2022-04-04
  • 淺談python 中類屬性共享的問(wèn)題

    淺談python 中類屬性共享的問(wèn)題

    今天小編就為大家分享一篇淺談python 中類屬性共享的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • python入門(mén)之井字棋小游戲

    python入門(mén)之井字棋小游戲

    這篇文章主要為大家詳細(xì)介紹了python入門(mén)學(xué)習(xí)之井字棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評(píng)論