zoukankan      html  css  js  c++  java
  • (2)分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍

       本篇主要介绍对于一个爬虫框架的思考和,核心部件的介绍,以及常规的思考方法:

    一,猜想

        我们说的爬虫,一般至少要包含几个基本要素:

       1.请求发送对象(sender,对于request的封装,防止被封)

       2.解析文档对象(将请求的网页当作是html文档还是字符串)

       3.承载所需要的解析对象(标准格式的数据承载者)

       4.获取所需对象后的操作者 (得到对象后,是以文件形式保存还是存入数据库)

       5.整个流程的错误处理者(整个流程的异常监控者)

       

    二,验证

    我们来看看Scrapy 提供了哪些核心的对象

    基本概念

    命令行工具(Command line tools)
    学习用于管理Scrapy项目的命令行工具
    Items
    定义爬取的数据
    Spiders
    编写爬取网站的规则
    选择器(Selectors)
    使用XPath提取网页的数据
    Scrapy终端(Scrapy shell)
    在交互环境中测试提取数据的代码
    Item Loaders
    使用爬取到的数据填充item
    Item Pipeline
    后处理(Post-process),存储爬取的数据
    Feed exports
    以不同格式输出爬取数据到不同的存储端
    Link Extractors
    方便用于提取后续跟进链接的类。

    refer from :https://scrapy-chs.readthedocs.org/zh_CN/0.24/

    基本上我们所设想的对象Scrapy都会包含在里面了

    三,爬取

    我们知道,一般爬虫都是按如下规则来爬取数据的

    输入目标网址=> 编写处理规则(正则表达式或者xpath语法)=>对得到的数据进行处理 

    Scrapy的做法如下:

    1)新建一个项目

    以命令行形式切换到需要将代码放置的文件夹下,然后输入如下命令:

    scrapy startproject cnblogs
    

    文件夹下会生成一个cnblogs的文件下,切换到该文件夹下(记住切换)

    Item.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
    from scrapy.item import Field,Item
    
    class CnblogsItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
    
        Title = Field()
        TitleUrl = Field()
    

    在Spider文件夹下添加BasicGroupSpider.py 修改为如下内容

    from scrapy.spider import BaseSpider
    from scrapy.selector import HtmlXPathSelector
    from cnblogs.items import CnblogsItem
    
    class CnblogsSpider(BaseSpider):
        name = "cnblogs" #spider的名字
        allowed_domains = ["cnblogs.com"]
        start_urls = [
            'http://www.cnblogs.com/'
            ]  #待抓取的列表
    
        def parse(self, response):
            self.log("Fetch douban homepage page: %s" % response.url)
            hxs = HtmlXPathSelector(response)
    
            #authors = hxs.select('//a[@class="titlelnk"]')
    
            items = hxs.select('//a[contains(@class, "titlelnk")]')
    
            listitems = []
    
            for author in items:
                #print author.select('text()').extract()
                item = CnblogsItem()
                #property
                item['Title'] = author.select('text()').extract()
                item['TitleUrl'] =author.select('@href').extract()
                listitems.append(item)
    
            return listitems
    

    OK ,回到第一步的命令台的界面,输入如下命令

    scrapy crawl cnblogs --logfile=test.log -o cnblogs.json -t json

    四,结果

    关于里面的代码功能,自己去理解吧,写过代码的人大致都了解。

    ====>DEMO下载<====

    总结:

    本次主要分析了爬虫框架的大致构件,并验证了我们的猜想,关于python的爬虫框架有很多,不过像scrapy这样值得入手和研究的,比较少了,.net下的更少了。

  • 相关阅读:
    从零开始学习jQuery (一) 开天辟地入门篇
    c#获取当前应用程序所在路径
    软件和需求的实践
    [zt]如何将数据导入到 SQL Server Compact Edition 数据库中(四)
    C++与C#内存管理对比分析 (转载)
    [zt]如何将数据导入到 SQL Server Compact Edition 数据库中(五)
    [zt]如何将数据导入到 SQL Server Compact Edition 数据库中(三)
    SharePoint服务器修改域和机器名
    <处世36计>之第35计谈判计
    软件工程之需求分析
  • 原文地址:https://www.cnblogs.com/codefish/p/4779031.html
Copyright © 2011-2022 走看看