zoukankan      html  css  js  c++  java
  • scrapy初试

    scrapy初试

    创建项目

    打开cmd,在终端输入scrapy startproject tutorial,这里将在指定的文件夹下创建一个scrapy工程

    其中将会创建以下的文件:

    • scrapy.cfg: 项目的配置文件
    • tutorial/: 该项目的python模块。之后您将在此加入代码。
    • tutorial/items.py: 项目中的item文件.
    • tutorial/pipelines.py: 项目中的pipelines文件.
    • tutorial/settings.py: 项目的设置文件.
    • tutorial/spiders/: 放置spider代码的目录.

    定义item

    Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

    类似在ORM中做的一样,您可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field 的类属性来定义一个Item。 (如果不了解ORM, 不用担心,您会发现这个步骤非常简单)

    首先根据需要从dmoz.org获取到的数据对item进行建模。 我们需要从dmoz中获取名字,url,以及网站的描述。 对此,在item中定义相应的字段。编辑 tutorial 目录中的 items.py 文件:

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

    一开始这看起来可能有点复杂,但是通过定义item, 您可以很方便的使用Scrapy的其他方法。而这些方法需要知道您的item的定义.

    编写第一个爬虫

    在工程的根目录下打开终端输入scrapy genspider demo douban.com
    这里的demospders文件下的主要py文件
    douban.com是要爬取的域名,会在demo.py中的 allowed_domains中显示,主要的功能就是限制爬取的url

    spider代码中内容解析

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

    以下是spider目录下的demo.py的代码

    import scrapy
    
    class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["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)
    

    spider的爬取

    进入工程的根目录下打开终端输入:scrapy crawl dmoz

    spider中的数据存取

    在工程的根目录下打开终端输入scrapy crawl dmoz -o items.json
    这里是将数据存储到json文件中

  • 相关阅读:
    BZOJ 3744 Gty的妹子序列 分块+树状数组+主席树
    BZOJ 3744 Gty的妹子序列 分块+树状数组
    51nod 1850 抽卡大赛 (十二省联考模测) DP
    BZOJ 4127: Abs (树链剖分 线段树求区间绝对值之和 带区间加法)
    BZOJ 2157: 旅游 (树链剖分+线段树)
    BZOJ 2836: 魔法树 (树链剖分+线段树)
    BZOJ 3531: [Sdoi2014]旅行 (树剖+动态开点线段树)
    树状数组彻底入门,算法小白都看得懂的超详细解析
    点双联通分量(BCC)的正确姿势
    uoj30【CF Round #278】Tourists(圆方树+树链剖分+可删除堆)
  • 原文地址:https://www.cnblogs.com/Chenjiabing/p/6907202.html
Copyright © 2011-2022 走看看