zoukankan      html  css  js  c++  java
  • scrapy框架第一章

    操作环境:python2.7+scrapy

    安装比较简单,网上教程也超多,就不在此赘述。

    示例网站:https://www.cnblogs.com/cate/python/ (爬去关于博客园所有python的帖子)

    #############开始新建项目    E:workscrapy_pro

    打开cmd(命令行窗口)

    cd 进入文件夹   cd..回到上一级    进入某个盘符直接输入E:   大小写没关系

    ############执行新建项目命令   项目名 cnblog

    scrapy startproject  cnblog   

     

    创建ok,进入项目cd  cnblog ,操作该项目时在这一层目录。

    目录如下

    dir-spiders:存放所有spider的文件,里面的spider文件自己新建。

    items.py:用来存放爬去的内容,在导出数据时需要用到

    middlewares.py:中间件文件,写入多余的功能,比如需要与PhantomJs结合使用时修改这里。

    pipelines.py:暂时没用过。

    settings.py:项目配置文件。

    ######打开spiders文件夹开始新建spider文件   test.py  名字无所谓

    打开test.py

    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    ###引入的是items.py里面构造的类
    from cnblog.items import ExampleItem
    class TestSpider(CrawlSpider):
       name
    = 'blog' allowed_domains = ['cnblogs.com'] start_urls = ['https://www.cnblogs.com/cate/python/'] rules = ( ###爬去索引页并跟踪其中链接 ###查找start_urls 所有的分页页面 Rule(LinkExtractor(allow=r'/cate/python/[2-9]*'), follow=True), ###爬去items页面并将下载响应返回个头parse_item函数 ####查询每个分页页面的详情页 Rule(LinkExtractor(allow=r'http://www.cnblogs.com/[a-z]*/p/[0-1]*'), callback='parse_item', follow=False ), ) def parse_item(self, response): item = ExampleItem() #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract() #i['name'] = response.xpath('//div[@id="name"]').extract() #i['description'] = response.xpath('//div[@id="description"]').extract() #print response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract() if response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract(): item['blog_name'] = response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract() else: item['blog_name'] = 'null' items = [] items.append(item) return items

    items.py

    # -*- coding: utf-8 -*-
    
    # Define here the models for your scraped items
    #
    # See documentation in:
    # http://doc.scrapy.org/en/latest/topics/items.html
    
    import scrapy
    
    
    class ExampleItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        blog_name = scrapy.Field()

    上面是两个需要用到的两个文件

    前面的是spider文件,另一个是定义存储的内容文件

    items.py

    blog_name = scrapy.Field() //定义一个获取的字段,获取详情页的标题

    test.py

    from scrapy.linkextractors import LinkExtractor   ##引入linkextractors 用于筛选链接和跟进链接,还有很多功能,可以去百度下
    from scrapy.spiders import CrawlSpider, Rule   ##定义spider的模板,引入Rule规则
    from example.items import ExampleItem   ##引入定义的items.py

    下面是对类的详细介绍

    class TestSpider(CrawlSpider):    ##继承模板CrawlSpider 普通模板继承Spider 
        name = 'blog'     ###定义spider名    运行---$ scrapy crawl blog    
        allowed_domains = ['cnblogs.com']    ##  定义查找范围
        start_urls = ['https://www.cnblogs.com/cate/python/']   ###初始url
        ###通过rules限定查找的url
        ###分页的url ='/cate/python/[2-9]*'
        ###详情页的url = 'http://www.cnblogs.com/[a-z]*/p/[0-1]*'
        ####当有follow=True  则会跟进该页面 
        ####原理就是  spider在初始页面查找,同时查找帖子详情页的url和下一个分页,同时跟进下一个分页页面,继续查找下一个分页页面和上面的详情页url,详情页面使用回调函数进行采集
        rules = (
            ###爬去索引页并跟踪其中链接
            ###查找start_urls  所有的分页页面
            Rule(LinkExtractor(allow=r'/cate/python/[2-9]*'), follow=True),
            ###爬去items页面并将下载响应返回个头parse_item函数
            ####查询每个分页页面的详情页
            Rule(LinkExtractor(allow=r'http://www.cnblogs.com/[a-z]*/p/[0-1]*'), callback='parse_item', follow=False
                ),
        )
        ####详情页面回调函数
        def parse_item(self, response):
            ###实例化item类
            item = ExampleItem()
            ###几种xpath获取标签的方式
            #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
            #i['name'] = response.xpath('//div[@id="name"]').extract()
            #i['description'] = response.xpath('//div[@id="description"]').extract()
            #print response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract()
            if response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract():
                item['blog_name'] = response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract()
            else:
                item['blog_name'] = 'null'
            items = []
            ###把数据装进仓库
            items.append(item)
            return items    

    #####现在开始执行spider

    切换到当前目录

    —————————导出json文件

    scrapy crawl blog-o data.json -t json  -s LOG_LEVEl=ERROR
    注意:执行的是spider 的name, 后面的内容是设置导出文件的类型,名字以及log的级别,设置为error级别。
    下一次教大家怎么配合PhantomJS来写爬虫。
    我的邮箱是1107949255@qq.com有兴趣的同学可以一起交流,非诚勿扰。
  • 相关阅读:
    主要用到 DELPHI XE 10.2新增HASH函数
    个人使用Onenote和Evernote对比
    OneNote和Evernote的特征
    allure的HTML报告信息解疑
    记:ModuleNotFoundError: No module named 'pip'
    用例需注意的点
    Selenium Builder
    定位到元素后可进行的操作事件
    基本定位方法
    webdriver的基本操作
  • 原文地址:https://www.cnblogs.com/shuangzikun/p/taotao_python_scrapy_cnblog.html
Copyright © 2011-2022 走看看