scrapy -- CrawlSpider類

CrawlSpider類是什么?

  • 是Spider的一個子類
  • 區別:
    • Spider是獲取到URL進行 手動發送請求 : yield scrapy.Request(url=new_url,callback=self.parse)
    • 是通過提取器類:LinkExtractor,提前到頁面所有符合條件的URL,然后用Rule類對符合條件的URL自動發送請求
    • 創建CrawlSpider爬蟲的命令:scrapy genspider -t crawl xxx(爬蟲名稱) www.xxxx.com(爬取的URL)

基于CrawlSpider創建的爬蟲類,代碼示例:

import scrapy
from scrapy.linkextractors import LinkExtractor  #導入url提取器的類
from scrapy.spiders import CrawlSpider, Rule     #Rule可用于自動發送請求


class XuexiSpider(CrawlSpider):
    name = 'xuexi'
    allowed_domains = ['www.xxx.com']
    start_urls = ['http://www.xxx.com/']
    #LinkExtractor(allow=r'Items/') 該類的allow參數寫入正則匹配規則,就會按照正則去響應信息中匹配URL,當然也有別的匹配規則,比如CSS
    rules = (
        #follow為True可以自動將所有響應信息的符合的規則的url都獲取到,并發送請求
        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

下面也一個案例,就以爬取陽光信息網為例,代碼示例:

#1.爬蟲文件.py代碼示例:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from sunPro.items import SunproItem,DetailItem

#需求:爬取sun網站中的編號,新聞標題,新聞內容,標號
class SunSpider(CrawlSpider):
    name = 'sun'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page=']

    #鏈接提取器:根據指定規則(allow="正則")進行指定鏈接的提取
    link = LinkExtractor(allow=r'type=4&page=\d+')
    link_detail = LinkExtractor(allow=r'question/\d+/\d+\.shtml')
    rules = (
        #規則解析器:將鏈接提取器提取到的鏈接進行指定規則(callback)的解析操作
        Rule(link, callback='parse_item', follow=True),
        #follow=True:可以將鏈接提取器 繼續作用到 連接提取器提取到的鏈接 所對應的頁面中
        Rule(link_detail,callback='parse_detail')
    )
    #http://wz.sun0769.com/html/question//.shtml
    #http://wz.sun0769.com/html/question//.shtml

    #解析新聞編號和新聞的標題
    #如下兩個解析方法中是不可以實現請求傳參!
    #如法將兩個解析方法解析的數據存儲到同一個item中,可以以此存儲到兩個item
    def parse_item(self, response):
        #注意:xpath表達式中不可以出現tbody標簽
        tr_list = response.xpath('//*[@id="morelist"]/div/table[2]//tr/td/table//tr')
        for tr in tr_list:
            new_num = tr.xpath('./td[1]/text()').extract_first()
            new_title = tr.xpath('./td[2]/a[2]/@title').extract_first()
            item = SunproItem()
            item['title'] = new_title
            item['new_num'] = new_num

            yield item

    #解析新聞內容和新聞編號
    def parse_detail(self,response):
        new_id = response.xpath('/html/body/div[9]/table[1]//tr/td[2]/span[2]/text()').extract_first()
        new_content = response.xpath('/html/body/div[9]/table[2]//tr[1]//text()').extract()
        new_content = ''.join(new_content)

        # print(new_id,new_content)
        item = DetailItem()
        item['content'] = new_content
        item['new_id'] = new_id

        yield item

#2.itmes.py代碼示例:
#因為是不同頁面的數據,又不能進行參數化,所有通過兩個item類,來接收不同頁面的解析數據

import scrapy


class SunproItem(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()
    new_num = scrapy.Field()


class DetailItem(scrapy.Item):
    new_id = scrapy.Field()
    content = scrapy.Field()

#3.pipeline.py代碼示例:
#根據不同item的名字,來判斷,數據來源于哪一個item

class SunproPipeline(object):
    def process_item(self, item, spider):
        #如何判定item的類型
        #將數據寫入數據庫時,如何保證數據的一致性
        if item.__class__.__name__ == 'DetailItem':
            print(item['new_id'],item['content'])
            pass
        else:
            print(item['new_num'],item['title'])
        return item

分享標題:scrapy -- CrawlSpider類
URL標題:http://m.kartarina.com/article42/dsogpec.html

成都網站建設公司_創新互聯,為您提供移動網站建設域名注冊品牌網站建設搜索引擎優化網站改版

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化
主站蜘蛛池模板: 日韩精品无码免费一区二区三区 | 久久久久亚洲av无码专区导航 | 亚洲欧洲自拍拍偷午夜色无码| 少妇无码太爽了不卡视频在线看| 天堂Aⅴ无码一区二区三区| 国产精品99精品无码视亚| 日韩精品真人荷官无码| 性色av无码免费一区二区三区 | 无码人妻熟妇AV又粗又大| 亚洲AV无码一区二区三区性色| 国产成人综合日韩精品无码| 91精品久久久久久无码 | 国产热の有码热の无码视频| 免费无码又爽又刺激高潮视频| 成年轻人电影www无码| 久久AV无码精品人妻糸列| a级毛片无码免费真人久久| 国语成本人片免费av无码| 无码国产福利av私拍| 高潮潮喷奶水飞溅视频无码| 亚洲av无码成人精品国产| 未满十八18禁止免费无码网站| 一本之道高清无码视频| 亚洲av日韩aⅴ无码色老头| 久久精品国产亚洲AV无码偷窥| 日韩a级无码免费视频| 亚洲精品一级无码中文字幕| 无码视频免费一区二三区| 亚洲AV无码一区二区三区牛牛| 亚洲大尺度无码无码专区| 国产丝袜无码一区二区三区视频| 无码一区二区三区亚洲人妻| 亚洲精品久久无码| 亚洲精品无码久久毛片波多野吉衣 | 蜜桃成人无码区免费视频网站 | 精品无码中文视频在线观看| 中日韩亚洲人成无码网站| 亚洲av无码专区在线电影天堂| 国产精品久久久久无码av| 久久国产精品无码HDAV| 无码人妻丝袜在线视频|