Scrapy基础——Spider

简介: 写在前面这是Scrapy学习的基础部分,大部分内容来自于官方文档的个人解读,不太适合那些想在30分钟以内学会Scrapy的人学习,但是如果你在看那些xx分钟入门Scrapy的时候存在疑问,可以翻看这篇查查相关内容。

写在前面

这是Scrapy学习的基础部分,大部分内容来自于官方文档的个人解读,不太适合那些想在30分钟以内学会Scrapy的人学习,但是如果你在看那些xx分钟入门Scrapy的时候存在疑问,可以翻看这篇查查相关内容。如果感觉我写的有任何不对的地方,欢迎提出疑问,我会及时回复的。

scrapy.spiders.Spider

scrapy.spiders.Spider是Scrapy框架最核心部分之一,定义了如何爬取网站和获取结构化信息等。
查看源码发现Spider定义了from_crawler, sest_crawler, start_requests, make_requests_from_url, parse, update_settings, handles_request, close等function,而在官方文档规定了自定义的爬虫必须继承Spider类,要有至少以下几个模块:

  1. name: 必须,没有他scrapy crawl 找不到入口
  2. allowed_domains:可选,如果你怕从知乎爬到果壳,请可以定义一个字符串的list,并且OffsiteMiddleware
    处于开启状态
  3. start_urls:一个URLs list,爬虫的起点网页
  4. custom_settings:仅在爬虫运行时覆盖来自settings的设置,低手不知道怎么玩
  5. logger: 一个日志记录者,以后再debug的时候再说吧
  6. from_crawler:这是Scrapy 用于创建自定义爬虫的类方法(class method),目前你不需要对他动手,这个方法会设置(set)crawlersettings
  7. settings:运行爬虫时的配置,是Settings的实例,低手不会玩
  8. crawler:在类初始化后由from_crawler设置,链接到绑定的spider的Crawler类,涉及到Crawler API ,低手用不来。
  9. start_requests():当start_urls有URLS即不为空时,会调用start_requests(),接着它会继续调用make_requests_from_url去Request每一个url。所以我们可以不用定义start_urls,而在这里自定义一个start_requests,使用其他Request,如FormRequest然后callbck(反馈)给自定义的parse。注:start_requests在爬虫运行只会执行一次。
  10. make_requests_from_url(url):前面说过,这个方法接收urls,返回reponse, 返回的response会默认(callback)传递给parse
  11. parse(response):如果没有自定义start_requests(),那么必须定义这个函数,并且在里面定义网页数据提取方法,十分重要哦。
  12. log(message[, level, component]):和上面的logger差不多,debug时候再仔细研究吧
  13. closed(reason):在爬虫关闭的时候调用,不太懂也不会用,这里先占位
    Link Extractors(链接提取器)是一类用来从返回网页中提取符合要求的链接
    Rule有以下几个参数
  • link_extractor为LinkExtractor,用于定义需要提取的链接。
  • callback参数:当link_extractor获取到链接时参数所指定的值作为回调函数。注:不能使用parse作为回调函数。
  • follow:指定了根据该规则从response提取的链接是否需要跟进。callback为None,默认值为true。
  • process_links:主要用来过滤由link_extractor获取到的链接。
  • process_request:主要用来过滤在rule中提取到的request。

官方提供的例子:

import scrapy
from myproject.items import MyItem

class MySpider(scrapy.Spider):
    name = 'example.com'
    allowed_domains = ['example.com']

    def start_requests(self):
        yield scrapy.Request('http://www.example.com/1.html', self.parse)
        yield scrapy.Request('http://www.example.com/2.html', self.parse)
        yield scrapy.Request('http://www.example.com/3.html', self.parse)

    def parse(self, response):
        for h3 in response.xpath('//h3').extract():
            yield MyItem(title=h3)

        for url in response.xpath('//a/@href').extract():
            yield scrapy.Request(url, callback=self.parse)
目录
相关文章
|
数据采集 Python
配置Pycharm的Scrapy爬虫Spider子类通用模板
配置Pycharm的Scrapy爬虫Spider子类通用模板
191 0
|
数据采集 Python
Python爬虫:scrapy框架Spider类参数设置
Python爬虫:scrapy框架Spider类参数设置
111 0
Python爬虫:scrapy框架Spider类参数设置
|
数据采集 Python
Python爬虫:scrapy框架Spider类参数设置
Python爬虫:scrapy框架Spider类参数设置
182 0
|
数据采集 NoSQL 调度
scrapy分布式Spider源码分析及实现过程
分布式框架scrapy_redis实现了一套完整的组件,其中也实现了spider,RedisSpider是在继承原scrapy的Spider的基础上略有改动,初始URL不在从start_urls列表中读取,而是从redis起始队列中读取。
1084 0
Scrapy框架的使用之Spider的用法
在Scrapy中,要抓取网站的链接配置、抓取逻辑、解析逻辑里其实都是在Spider中配置的。在前一节实例中,我们发现抓取逻辑也是在Spider中完成的。本节我们就来专门了解一下Spider的基本用法。
|
Python
Scrapy框架的使用之Spider的用法
在Scrapy中,要抓取网站的链接配置、抓取逻辑、解析逻辑里其实都是在Spider中配置的。在前一节实例中,我们发现抓取逻辑也是在Spider中完成的。本节我们就来专门了解一下Spider的基本用法。
13812 0
|
Python 数据采集 程序员
为Scrapy项目提供多个Spider
为Scrapy项目提供多个Spider scrapy startproject project name 在终端输入上述命令后,会根据生成一个完整的爬虫项目 此时的项目树如下 |-- JobCrawler |-- __init__.
1581 0
|
Python 数据格式 JSON
scrapy 爬取百度知道,多spider子一个项目中,使用一个pielines
爬取过程中 遇见 百度蜘蛛反爬 robot.txt,我们可以在scrapy 的setting.py 配置文件下配置 ROBOTSTXT_OBEY = False 最终代码 # -*- coding: utf-8 -*- from scrapy.spider import Spider from scrapy.contrib.spiders import CrawlSpi
2731 0
|
4月前
|
数据采集 存储 数据处理
Scrapy:Python网络爬虫框架的利器
在当今信息时代,网络数据已成为企业和个人获取信息的重要途径。而Python网络爬虫框架Scrapy则成为了网络爬虫工程师的必备工具。本文将介绍Scrapy的概念与实践,以及其在数据采集和处理过程中的应用。
24 1
|
5月前
|
数据采集 调度 Python
Scrapy爬虫中合理使用time.sleep和Request
Scrapy爬虫中合理使用time.sleep和Request