美文网首页Python爬虫系列
Scrapy简单入门实例

Scrapy简单入门实例

作者: hu1991die | 来源:发表于2017-11-20 23:12 被阅读421次

    一、demo介绍:

    1. 创建一个Scrapy项目(爬虫)
    2. 定义提取的Item对象(即ORM,类似于Java中的POJO实体类)
    3. 编写爬取的Spider爬虫并且提取Item(核心内容)
    4. 编写item pipeline管道来存储提取的item信息(持久化数据,例如存Mysql数据库或者MongoDB数据库或者导出CSV、Excel文件等等操作)

    二、创建项目

    使用startproject命令创建一个Scrapy爬虫项目

    scrapy startproject tutorial
    
    image.png

    三、目录结构:

    |-tutorial/
        |-scrapy.cfg
        |-tutorial/
             |-__init__.py
             |-items.py
             |-pipelines.py
             |-settings.py
             |-middlewares.py
             |-spiders/
                |- __init__.py
    

    四、结构说明:

    • tutorial/init.py:该文件定义了包的属性和方法。一个包是一个带有特殊文件 init.py 的目录,其实它可以什么也不定义,可以只是一个空文件,但是必须存在(如果删掉就变成一个普通的目录了)。
    • scrapy.cfg: 自动生成的项目配置文件(类似于eclipse生成的.project文件,或者idea生成的.iml文件)。
    • tutorial/: 该项目的python模块,之后您将在此加入代码。
    • tutorial/items.py: 项目中的item文件(ORM定义)。
    • tutorial/pipelines.py: 项目中的pipelines文件(存储数据)。
    • tutorial/middlewares.py: Spider中间件(常用的有下载中间件,即处理下载请求部分,这里不做介绍,如果想深入了解可以看下官网教程)
    • tutorial/settings.py: 项目的核心配置文件(配置请求头、数据库连接信息、USER_AGENT,线程数等等)。
    • tutorial/spiders/: 放置spider代码的目录(编写spider爬虫)。

    五、定义Item

    ORM(对象关系映射)定义,如果做过javaweb开发的童靴应该知道,就和通常我们定义的javaBean对象一样,用来装载对象数据用的。

    import scrapy
    
    class TutorialItem(scrapy.Item):
        title = scrapy.Field()
        link = scrapy.Field()
        desc = scrapy.Field()
    

    六、编写第一个爬虫(Spider)

    tutorial/spiders目录下新建一个dmoz_spider.py文件,创建一个DmozSplider类,并且继承scrapy.Spider类。

    import scrapy
    
    class DmozSplider(scrapy.Spider):
        name="dmoz"
        allowed_domain=["dmoz.org"]
        start_urls=[
            "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
            "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
        ]
    
        def parse(self,response):
            filename=response.url.split("/")[-2]
            with open(filename,"wb") as f:
                f.write(response.body)
    

    注意,上面我们创建了一个DmozSplider类,并且该类必须继承于scrapy.Spider类,且同时定义以下三个属性:

    name:用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
    start_urls:包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
    parse():是spider的一个方法。 被调用时,每个初始URL完成下载后生成的Response对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的Request对象。

    七、爬取

    进入项目的根目录,执行下列命令启动spider爬虫:

    scrapy crawl dmoz
    

    或者写一个main.py启动入口(如果是在PyCharm中,直接右键运行【Run Main】即可):

    from scrapy import cmdline
    
    cmdline.execute("scrapy crawl dmoz".split())
    
    image.png

    八、保存爬取到的数据:

    scrapy crawl dmoz -o items.json

    该命令将采用 JSON 格式对爬取的数据进行序列化,生成items.json文件

    官网教程:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html#spider

    相关文章

      网友评论

        本文标题:Scrapy简单入门实例

        本文链接:https://www.haomeiwen.com/subject/cgvbvxtx.html