<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          普通爬蟲有啥意思,我寫了個通用Scrapy爬蟲

          共 3131字,需瀏覽 7分鐘

           ·

          2021-10-21 05:32


          大家好,我是Kuls。今天是來自讀者劍南的投稿。

          除了錢,大家還比較喜歡什么?當然是全能、萬能和通用的人或事物啦,例如:全能、什么都會的員工、萬能鑰匙、通用爬蟲等等。今天我們學習Scrapy通用爬蟲,利用Scrapy通用爬蟲來獲取美食杰網(wǎng)站[1]。

          Scrapy通用爬蟲

          創(chuàng)建Scrapy項目

          Scrapy爬蟲和Scrapy通用爬蟲都是通過以下執(zhí)行命令來創(chuàng)建Scrapy項目,沒什么不同,命令如下所示:

          Scrapy startproject Scrapy項目名

          Spider爬蟲模板

          在創(chuàng)建spider爬蟲前,我們先看看有什么可用的爬蟲模板,執(zhí)行命令如下所示:

          scrapy genspider -l

          運行結(jié)果如下圖所示:

          其中:

          ?basic是我們之前創(chuàng)建Spider的時候,默認使用的爬蟲模板,也就是普通的爬蟲模板;?crawl模板是最常用于抓取常規(guī)網(wǎng)站的爬蟲模板,通過指定一些爬取規(guī)則來實現(xiàn)頁面的提取,很多情況下這個模板的爬取就足夠通用;?csvfeed模板是Scrapy最簡單的爬蟲模板,主要用于解析 CSV 文件,它是以行為單位來進行迭代,每迭代一行調(diào)用一次 parse_row() 方法;?xmlfeed模板主要用于處理RSS訂閱信息,RSS是一種信息聚合技術(shù),可以讓信息的發(fā)布和共享更為高效和便捷。

          接下來我們主要是講解最常用的爬蟲模板——crawl模板,其他模板我們會在往后的文章里講解,敬請期待?。?!

          CrawlSpider

          在使用crawl模板前,我們先要了解一下CrawlSpider。

          CrawlSpider是Scrapy提供的一個通用Spider,繼承自Spider類,除了擁有Spider類的所有方法和屬性,它還提供了rules屬性和parse_start_url()方法。

          其中:

          ?rules是包含一個或多個Rule對象的列表,我們可以指定一些爬取規(guī)則來實現(xiàn)頁面的提取;?parse_start_url()是一個可重寫的方法,當start_urls里對應(yīng)的Request得到的Response時,該方法被調(diào)用。

          創(chuàng)建crawl模板爬蟲

          crawl模板的通用爬蟲通過執(zhí)行以下命令來創(chuàng)建,以http://quotes.toscrape.com網(wǎng)站為例子,該網(wǎng)站是一個著名作家名言的網(wǎng)站,命令如下所示:

          scrapy genspider -t 模板類型 <爬蟲名字> <允許爬取的域名>scrapy genspider -t crawl quotes quotes.toscrape.com

          當然,我們可以把命令中的crawl改為xmlfeed或者csvfeed,這樣就會生成其他類型的爬蟲,成功創(chuàng)建后,在spiders文件夾中多了一個quotes.py文件,該文件正是我們創(chuàng)建的spider爬蟲,其內(nèi)容如下所示:

          import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider, Ruleclass QuotesSpider(CrawlSpider):    name = 'quotes'    allowed_domains = ['quotes.toscrape.com']    start_urls = ['http://quotes.toscrape.com/']    rules = (        Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),    )    def parse_item(self, response):        item = {}        #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()        #item['name'] = response.xpath('//div[@id="name"]').get()        #item['description'] = response.xpath('//div[@id="description"]').get()        return item

          其中:

          ?class QuotesSpider()是自定義spider類,繼承自CrawlSpider?name是定義此爬蟲名稱的字符串,每個項目唯一的名字,用來區(qū)分不同的Spider,啟動爬蟲時使用scrapy crawl +該爬蟲名字;?allowed_domains是允許爬取的域名,防止爬蟲爬到其他網(wǎng)站;?start_urls是最開始爬取的url;?rules是爬取規(guī)則屬性,是一個包含多個Rule對象的列表,該Rule主要用來確定當前頁面中的哪些鏈接需要繼續(xù)爬取、哪些頁面的爬取結(jié)果需要哪個方法來解析等。?parse_item()方法是負責解析返回響應(yīng)、提取數(shù)據(jù)或進一步生成要處理的請求。

          注意:不能修改這個方法的名字,且不能定義parse()方法?。。?/p>

          在創(chuàng)建Crawl模板的Spider爬蟲時,Rule中只展示了最常用的參數(shù),其完整參數(shù)如下所示:

          Rule(LinkExtractor(allow=r'Items/', deny=(), allowed_domains=(), deny_domains=(), restrict_xpaths=()), callback='parse_item', follow=True, cb_kwargs=None, process_links=None, process_request=None)

          Rule常見的參數(shù)如下:

          ?LinkExtractor是一個鏈接提取對象,它定義了如何從每個已爬取的頁面中提取鏈接并用于生成一個requests對象;?callback是一個可調(diào)用對象或字符,和之前定義requests的callback作用一樣,?指定鏈接提取器提取的每個鏈接交給哪個解析函數(shù)去處理;?follow是一個布爾值,它指定是否從使用此規(guī)則提取的每個響應(yīng)中跟蹤鏈接,當callback為None時,follow默認為True,否則為False;?cb_kwargs是字典,其包含了傳遞給回調(diào)用函數(shù)的參數(shù);?process_links指定處理函數(shù),從LinkExtractor中獲取到鏈接列表時,該函數(shù)將會被調(diào)用,主要用于過濾url;?process_request指定哪個函數(shù)將會被調(diào)用,該規(guī)則提取到每個request時都會調(diào)用該函數(shù),主要用于過濾request。

          LinkExtractor常用的參數(shù)如下:

          ?allow:滿足括號中正則表達式的URL會被提取,如果為空,則全部匹配;?deny:滿足括號中正則表達式的URL不會被提取,優(yōu)先級高于allow;?allow_domains:會被提取的鏈接的domains;?deny_domains:不會被提取的鏈接的domains;?restrict_xpaths:使用xpath表達式來規(guī)則URL地址的范圍。

          定義rules規(guī)則

          定義rules規(guī)則,也就是確定被提取的URL鏈接及其范圍。

          首先我們定義翻頁的rules規(guī)則,進入名人名言網(wǎng)站[2]并打開開發(fā)者工具,如下圖所示:

          由圖可知,翻頁的URL存放在

          瀏覽 28
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人精品三级 | 日本成人电影在线免费观看 | 欧美一二三 | 一区二区在线视频播放 | 国产一区二区免费在线观看 |