• 小爬爬7:回顾&&crawlSpider


    1.回顾昨日内容

    回顾
    - 全站数据爬取(分页)
        - 手动请求的发送Request(url,callback)
    - post请求和cookie处理
        - start_requests(self)
        - FromRequest(url,callback,formdata)
        - cookie操作是自动处理
    
    - 请求传参
        - 使用场景:
        - 实现:scrapy.Request(url,callback,meta={'':''})
                callback:response.meta['']
    - 中间件
        - 下载中间件:批量拦截所有的请求和响应
        - 拦截请求:UA伪装(process_request),代理ip(process_exception:return request)
        - 拦截响应:process_response

    2.crawl总结

    - CrawlSpider
        作用:就是用于进行全站数据的爬取
        - CrawlSpider就是Spider的一个子类
        - 如何新建一个基于CrawlSpider的爬虫文件
            - scrapy genspider -t crawl xxx www.xxx.com
        - LinkExtractor连接提取器:根据指定规则(正则)进行连接的提取
        - Rule规则解析器:将链接提取器提取到的链接进行请求发送,然后对获取的页面数据进行
            指定规则(callback)的解析
        - 一个链接提取器对应唯一一个规则解析器

    3.高效的全栈数据爬取

    新建一个抽屉的项目,我们对其进行全栈数据的爬取

     

    下图是页码对应的url

     

    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    
    
    class ChoutiSpider(CrawlSpider):
        name = 'chouti'
        # allowed_domains = ['www.xxx.com']
        #抽屉的第一页链接
        start_urls = ['https://dig.chouti.com/all/hot/recent/1']
        #全栈数据爬取是将所有页码依次请求发送
        #链接提取器:从起始url对应的页面中提取符合规则的链接,allow==>正则表达式
        link=LinkExtractor(allow=r'/all/hot/recent/d+')
        rules = (
            #规则解析器,可以有多个规则:将链接提取器提取到的链接对应的页面源码进行制定规则的解析
            Rule(link, callback='parse_item', follow=False),
        )
    
        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
            print(response)

    修改下面的内容:

    LOG_LEVEL='ERROR'

     下面我们提取指定的规则执行下面的命令:

    运行之后,我们只是爬取到了10条数据

    我们需要将最后一个界面作为起始,也就是follow=True就可以了

    再次运行下面的命令:

     

    运行上边的命令,我们就成功取到120页的数据.

    自己理解这句话:

    follow:True将链接提取器继续作用到链接提取器链接对应的页面源码中,

     新的需求:

     4.crawlSpider深度爬取

    案例:阳光热线,我们解析出首页的对应"标题"和详情页中的"段落"

     2个链接提取器和2和规则解析器

     (1)下面第一步,我们需要新建一个工程

     

     添加UA和修改robot协议为false

     注释allowed_domains,并且将起始url写在start_urls里边

    阳光热线的第一页:http://wz.sun0769.com/index.php/question/report?page=

    看一下,我们如何取到源码的链接:

     

    我们看到的是页码中的数据是30的倍数,对比我们看到了这个发生了变化

     

    修改follow=False,只爬取前五页,原因是数据量太大

     

     我们需要拿到table的xpath解析,注意要修改tbody,再拿到下面的tr

     执行程序

  • 相关阅读:
    日志框架1---多种日志门面和日志实现初步了解(转载)
    @Autowired 与@Resource的区别(转)
    Spring 之jdbc模板(JdbcTemplate与NamedParameterJdbcTemplate)
    springMVC中的Controller里面定义全局变量
    spring批量更新数据 ---- BatchPreparedStatementSetter
    easyui树查找
    根据ID和parentID利用Java递归获取全路径名称
    一个统一将数据转换为JSON的方法
    上传图片并限制图片格式和大小
    js上传文件(图片)的格式和大小限制
  • 原文地址:https://www.cnblogs.com/studybrother/p/10976957.html
Copyright © 2020-2023  润新知