当前位置: 首页 > news >正文

爬虫入门教程-Spider

Spider
爬虫是定义如何抓取某个网站(或一组网站)的类,包括如何执行抓取(即关注链接)以及如何从其网页中提取结构化数据(即抓取项目)。换句话说,Spider是您定义用于为特定网站(或在某些情况下,一组网站)抓取和解析网页的自定义行为的位置。

对于爬虫,循环经历这样的事情:

您首先生成用于抓取第一个URL的初始请求,然后指定要使用从这些请求下载的响应调用的回调函数。

第一个执行的请求通过调用 start_requests()(默认情况下)Request为在start_urls和中指定的URL生成的parse方法获取, 并且该方法作为请求的回调函数。

在回调函数中,您将解析响应(网页),并返回带有提取的数据,Item对象, Request对象或这些对象的可迭代的对象。这些请求还将包含回调(可能是相同的),然后由Scrapy下载,然后由指定的回调处理它们的响应。

在回调函数中,您通常使用选择器来解析页面内容 (但您也可以使用BeautifulSoup,lxml或您喜欢的任何机制),并使用解析的数据生成项目。

最后,从爬虫返回的项目通常将持久存储到数据库(在某些项目管道中)或使用Feed导出写入文件。

即使这个循环(或多或少)适用于任何种类的爬虫,有不同种类的默认爬虫捆绑到Scrapy中用于不同的目的。我们将在这里谈论这些类型。

class scrapy.spiders.Spider
这是最简单的爬虫,每个其他爬虫必须继承的爬虫(包括与Scrapy捆绑在一起的爬虫,以及你自己写的爬虫)。它不提供任何特殊功能。它只是提供了一个默认start_requests()实现,它从start_urlsspider属性发送请求,并parse 为每个结果响应调用spider的方法。

name
定义此爬虫名称的字符串。爬虫名称是爬虫如何由Scrapy定位(和实例化),因此它必须是唯一的。但是,没有什么能阻止你实例化同一个爬虫的多个实例。这是最重要的爬虫属性,它是必需的。

如果爬虫抓取单个域名,通常的做法是在域后面命名爬虫。因此,例如,抓取的爬虫mywebsite.com通常会被调用 mywebsite。

注意
在Python 2中,这必须是ASCII。

allowed_domains
允许此爬虫抓取的域的字符串的可选列表,指定一个列表可以抓取,其它就不会抓取了。

start_urls
当没有指定特定网址时,爬虫将开始抓取的网址列表。

custom_settings
运行此爬虫时将从项目宽配置覆盖的设置字典。它必须定义为类属性,因为设置在实例化之前更新。

有关可用内置设置的列表,请参阅: 内置设置参考。

crawler
此属性from_crawler()在初始化类后由类方法设置,并链接Crawler到此爬虫实例绑定到的对象。

Crawlers在项目中封装了很多组件,用于单个条目访问(例如扩展,中间件,信号管理器等)。有关详情,请参阅抓取工具API。

settings
运行此爬虫的配置。这是一个 Settings实例,有关此主题的详细介绍,请参阅设置主题。

logger
用Spider创建的Python记录器name。您可以使用它通过它发送日志消息,如记录爬虫程序中所述。

from_crawler(crawler, args,* kwargs )
是Scrapy用来创建爬虫的类方法。

您可能不需要直接覆盖这一点,因为默认实现充当方法的代理,init()使用给定的参数args和命名参数kwargs调用它。

尽管如此,此方法 在新实例中设置crawler和settings属性,以便以后可以在爬虫程序中访问它们。

参数:

crawler(Crawlerinstance) - 爬虫将绑定到的爬虫

args(list) - 传递给init()方法的参数

kwargs(dict) - 传递给init()方法的关键字参数

start_requests()
此方法必须返回一个可迭代的第一个请求来抓取这个爬虫。

有了start_requests(),就不写了start_urls,写了也没有用。

默认实现是:start_urls,但是可以复写的方法start_requests。

http://www.lryc.cn/news/33476.html

相关文章:

  • Python|蓝桥杯进阶第二卷——贪心
  • Chrome开发使用技巧总结
  • 你真的会在阳光下拍照片么?
  • 量化择时——均线策略及改进方法(第1部分—因子测算)
  • 封装几个有用的 Vue3 组合式API
  • MyBatisPlus中的条件构造器Wrapper
  • 类和对象及其构造方法
  • HStream Console、HStreamDB 0.14 发布
  • 参考文献怎么查找,去哪里查找?一篇文章讲明白这些问题
  • docker-compose+HAProxy+Keepalived搭建高可用 RabbitMQ 集群
  • 自动化框架如何搭建?让10年阿里自动化测试老司机帮你搞定!自动化测试脚本怎么写?
  • 剑指 Offer 15. 二进制中1的个数
  • CHAPTER 3 磁盘管理
  • MS python学习(7)
  • 工业物联网“杀手级”应用—预测性维护
  • Java代码弱点与修复之——Explicit null dereferenced(显式空间接引用)
  • 一元导数与多元求导数总结
  • 通过堆栈分析深拷贝、浅拷贝、赋值的差异
  • 网络割接概述
  • 开放开源开先河(下)
  • maven的学习
  • 从前端到后端全面解析文件上传
  • 全网火爆,软件测试面试题大全,接口测试题+回答 (18k+的offer)
  • 【iOS】—— 浅看block源码
  • I.MX6ULL_Linux_系统篇(23) busybox文件系统构建
  • shpjs将.zip文件转成geoJson
  • eBay是不是一定要养号?是的
  • 宝塔(二):升级JDK版本
  • 【LeetCode】螺旋矩阵 [M](数组)
  • 实验二:动态规划