Python爬虫框架Scrapy学习记录-Spider

Scrapy简介

Scrapy是Python实现的爬虫框架,使用只需要关注核心业务即可.安装教程请参考官方文档

安装完成之后可通过scrapy 命令创建项目,爬虫,及运行爬虫,详情使用 scrapy -h 命令查看

创建项目及爬虫后重写爬虫中parse方法即可实现简单内容爬取,支持xpath及css模式提取内容

项目结构说明

图片中meijm_practice为创建的项目名称.

  • spiders文件夹:存放具体爬虫类继承自scrapy.Spider及其子类,作用是爬取网页并生产具体实体
  • items.py:存放爬虫中使用到的实体
  • middlewares.py: 中间件,例如ip代理等
  • pipelines.py:直译是管道,对爬虫产生的实体进行后续处理,例如存储至数据库,下载等
  • settings.py:项目全局配置,设置启用的中间件,管道,请求头等.

scrapy.Spider类简介

核心属性及方法说明

名称 类型 说明
name 字符串属性 爬虫名称,执行爬虫时使用
custom_settings 字典属性 自定义设置,指定中间件管道,请求头等
allowed_domains 数组属性 允许的域名,创建爬虫时指定,非必须
start_urls 数组属性 爬虫开始的地址
start_requests(slf) 重载方法 爬虫开始地址的方法模式,返回为<br /> yield scrapy.Request(url=地址, callback=self.parse)
parse(self, response) 重载方法 解析网页,并生产具体实体或启动下次爬取

例子

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
        'http://quotes.toscrape.com/page/2/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('small.author::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

命令行执行爬虫

scrapy crawl quotes -O quotes.json

直接执行会将爬取到的内容输出至qutoes.json文件中不加"-O quotes.json"则仅输出至控制台

其它

parse中返回下次爬取网址的几种方法

  • response.follow_all(response.xpath("a标签"), self.解析函数)
  • yield scrapy.Request(url地址绝对路径, callback=self.解析函数)
  • yield response.follow(url相对路径/选择器返回的单个a标签, callback=self.解析函数)
  • yield from response.follow_all(选择器返回的所有a标签, callback=self.解析函数)

self为当前类,解析函数参数与parse相同

scrapy.Spider还有几个官方子类,常用的是CrawlSpider:支持正则过滤url

参考资料

官方网站 https://scrapy.org/

中文文档 https://www.osgeo.cn/scrapy/intro/tutorial.html

菜鸟教程 https://www.runoob.com/w3cnote/scrapy-detail.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章