2022年4月22日星期五

Scrapy教程


安装 scrapy

    pip install scrapy

安装完成后,命令行就多了 scrapy 命令。

新建一个名为 imageproject 的项目:

    scrapy startproject imageproject

scrapy 自动生成的文件结构如下:

    scrapy.cfg
    imageproject
        __init.py
        middlewares.py
        pypipelines.py
        settings.py
        spiders/
            __init.py

每个文件的作用是:

    items.py:定义待抓取域的模型。
    middlewares.py:控制请求和响应中间件。
    pipelines.py:处理要抓取的域。
    settings.py:一些设置,如用户代理、爬取延时等。
    spiders/:该目录存储实际的爬虫代码。
    scrapy.cfg:项目配置。


修改 setting.py

scrapy 的设置默认遵守 robots.txt,通常需要把此项设置改掉。

把 ROBOTSTXT_OBEY 设为 False。
    # Obey robots.txt rules
    ROBOTSTXT_OBEY = False

tems.py

Item 定义结构化数据字段,用来保存爬取到的数据,有点像 Python 中的 dict,但是提供了一些额外的保护减少错误。

    import scrapy

    class ImageItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()

        image_urls = scrapy.Field()
        image = scrapy.Field()


制作爬虫,即创建 spiders/ 目录底下的代码

运行命令

    scrapy genspider ab "ab.com"

这样 spiders/ 目录下会创建一个名为 ab.py 的爬虫脚本。


运行爬虫

    scrapy crawler ab


IPv6 的 fe80开头的地址

fe80开头的 ipv6 地址不是公网地址,没人给你分ip,自动协商的地址,通常无法用于上网。 现在各大运营商用的ipv6: 电信是240e开头的(240e::/20) 移动是2409开头的(2409:8000::/20) 联通是2408开头的(2408:8000::/20)