Scrapy爬虫使用

飞速起步

  • 安装 scrapy
    pip install Scrapy(_类 unix 记得加 sudo_)
    安装完成以后,到命令行输入Scrapy,查看是否安装成功。

准备和配置

  • scrapy startproject [name]创建项目。
  • 项目文件说明

    items.py:数据模型,类似于 dto、orm 中的 model
    spiders:爬虫程序
    middlewares.py:模型中的中间件
    pipelines.py:管道,对 item 进行处理,类似于很多服务器的请求管道
    settings.py:程序设置,主要是一些优先级设置,优先级越高,值越小
    scrapy.cfg:配置

  • 基础设置
    settings.py 中,找到ROBOTSTXT_OBEY = True,改为ROBOTSTXT_OBEY = False或者把他注释了
    这东西的意思是:每个网站可以在根目录下放一个 robots.txt 的文件,文件里面告诉了爬虫哪些网址是可以爬的,当然这就是个君子协议,靠你自己选择是不是要遵守。
  • 设置 UTF-8:
    settings.py 中,添加一行:FEED_EXPORT_ENCODING = 'utf-8'
  • 生成爬虫
    命令行输入:scrapy genspider [文件名] [网址],生成爬虫文件。可以在 spiders 文件夹下面看到。

开始代码

  • item:自己写一个 item
class yourItem(scrapy.Item):
    info1 = scrapy.Field()
    info2 = scrapy.Field()

info1、info2,就是数据模型对应的字段,看 scrapy.Item 的源码,实际上就是个 dict
所以可以这样理解:

{
  "info1": None,
  "info2": None
}
  • spider
from name.items import yourItem
class YourSpider(scrapy.Spider):
    name = 'yourname'
    allowed_domains = ['xxx.com']
    start_urls = ['http://xxx.com/yyy/zzz']

    def parse(self, response):
        info1 = response.xpath('//div/a/text()').extract_first() #第一个
        info2 = response.xpath('//div/a/text()').extract() #extract 永远返回一个数组
        item = yourItem()
        item['info1'] = info1
        item['info2'] = info2
        yield item

没啥好说的,就是爬取信息,然后设置 item 的属性就好。

  • 可以爬了!!
    命令行输入:scrapy crawl yourname -o filename.csv,yourname 对应 YourSpider 这个类的 name 变量值。就会爬取数据放到 filename.csv 中,还有其他格式,自己研究。
  • pipelines
    如果你不想用 scrapy 默认的保存文件方法,那么就自定义一个保存文件的管道:
class YourPipeline(object):
    def process_item(self, item, spider):
        # 伪代码
        # open file
        # file.write(item.info1)
        # file.write(item.info2)
        # save and close file
        return item

之后到 settings.py,输入:

ITEM_PIPELINES = {
    'name.pipelines.YourPipeline': 300,
}

启动当前管道配置优先级,数字越小,优先级越靠前,然后就只需要输入scrapy crawl yourname就可以运行和保存了

  • 调试
    我用万能 vscode:新建调试配置文件,输入
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Scrapy",
      "type": "python",
      "request": "launch",
      "module": "scrapy",
      "args": ["crawl", "yourname"]
    }
  ]
}
  • 搞定!

版权声明:
除非注明,本博文章均为原创,转载请以链接形式标明本文地址。



   转载规则


《Scrapy爬虫使用》 Jackie Tang(唐浩桀) 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录