zoukankan      html  css  js  c++  java
  • python爬虫之Scrapy框架(CrawSpider)

    需求 想要爬去糗事百科全站的数据

    方法:

    (1)基于Scrapy框架中的Spider的递归爬去实现

    (2) 基于Scrapy框架的CrawlSpider的自动爬取来进行实现

    那么CrawlSpider又是什么呢?如何实现它的自动爬取?

    CrawlSpider的简介

    一 简介

    crawlspider是spider的一个子类,除了继承到Spider的功能外,还派生了其自己的更强大的功能和特性。其中最显著的功能就是'”LinkExtractors链接提取器'。Spider是所有怕爬虫类的基类

    二 使用

    步骤:

    (1)创建scrapy工程:scrapy startproject projectName

    (2) 创建爬虫文件:scrapy genspider -t crawl spidername www.xxx.com

    注意 这里创建爬虫文件时比之前创建的爬虫文件多了-t crawl 表示的时创建的爬虫文件是一个基于CrawlSpider这个类,而不是Spider这个基类了

    (3)生成的爬虫文件和之前的spider基类的爬虫文件有所不同

    需求 爬取到抽屉网站中分页中的url

    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    
    #爬取抽屉网站的分页的URL
    #注意 这里继承的类是CrawlSpider  而不是Spider
    class ChoutiSpider(CrawlSpider):
        name = 'chouti'
        # allowed_domains = ['www.xxx.com']
        start_urls = ['https://dig.chouti.com/r/scoff/hot/1']
        #allow表示链接提取器提取链接的规则
        rules = (
            #Rule  规则提取器:将链接提取器提取到的链接所对应的页面进行指定形式的解析
            #follow 让连接提取器继续作用到链接提取器提取到的链接所对应的页面中
            Rule(LinkExtractor(allow=r'/r/scoff/hot/d+'), callback='parse_item', follow=True),
        )
    
        def parse_item(self, response):
            print(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
    
    

    需求 爬取糗事百科网站的分页的URL

    #爬取糗事百科网站的分页的URL
    class ChoutiSpider(CrawlSpider):
        name = 'qiubai'
        # allowed_domains = ['www.xxx.com']
        start_urls = ['https://www.qiushibaike.com/pic/']
        #allow表示链接提取器提取链接的规则
        link = LinkExtractor(allow=r'/pic/page/d+?s=d+')
        link1 = LinkExtractor(allow=r'/pic/$')
        #注意这里可以有多个规则
        rules = (
            #Rule  规则提取器:将链接提取器提取到的链接所对应的页面进行指定形式的解析
            #follow 让连接提取器继续作用到链接提取器提取到的链接所对应的页面中
            Rule(link, callback='parse_item', follow=True),
            Rule(link1,callback='parse_item',follow=True)
        )
    
        def parse_item(self, response):
            print(response)
    
  • 相关阅读:
    转 Xcode调试技巧 EXC_BAD_ACCESS
    qq web协议(转)
    iphone 调试技巧
    转Xcode 调试技巧 XCode调试技巧–设置全局断点快速定位问题代码所在行[zz]
    xcode 允许SVN管理项目文件
    mql4如何自定义画图
    mql相关知识
    iphone 使用委托(delegate)在不同的窗口之间传递数据
    关于同一工单中上万笔序号的一次性生成
    SharpDevelop使用心得
  • 原文地址:https://www.cnblogs.com/mlhz/p/10480027.html
Copyright © 2011-2022 走看看