一、Spiders工作流程:

Spiders是Scrapy中最重要的地方,它定义了如何爬取及解析数据,可以说Spiders是Scrapy框架中的核心所在。

  1. 根据初始的urls生成requests对象并指定处理requests对象response的回调方法。初始的urls是由spider的start_urls属性指定的,然后默认调用start_requests方法生成对应的requests对象,处理requests对象response的默认回调方法是parse。
  2. 在回调方法里,解析response的内容并返回希望提取的数据,可以返回字典格式的数据,Item对象,request对象或者是这些对象的迭代器。如果是返回的request对象,同样也要指定其的回调方法(可以是当前的这一个),然后scrapy也会同样的处理这些request对象:获取他们的response,使用回调方法解析并返回数据。
  3. 在回调方法里,使用scrapy的selector(选择器)来提取response里的数据并返回(也可以使用其他的解析工具,如BeautifulSoup、lxml等)。
  4. 最后从spider返回的数据,我们可以通过Item Pipeline写入数据库或使用feed exports保存到文件中。

虽然该循环对任何类型的spider都(多少)适用,但scrapy仍然为了不同的需求提供了多种默认spider。 之后将讨论这些spider。

二、Spider属性功能定义

scrapy

最简单的spider:scrapy.spiders.Spider

scrapy中所有的spider都继承的它。它提供了spider最主要的属性和功能 - start_urls,start_requests(),parse()。

name

name - 用于定义spider名字的字符串。spider的名字是scrapy用于定位spider的,因此它的名字必须是唯一的。但是scrapy中没有任何机制可以防止你多次实例化同一个spider。所以名字是spider最重要的属性且是必须的。按惯例,如果spider是只爬取单一的域名,那spider名字就以域名来命名。如:爬取mywebsite.com的spider,通常取名为mywebsite。

allowed_domains

allowed_domains - 用于定义spider可以爬取的域名的字符串列表。如果OffsiteMiddleware被启用了,则不属于这个列表里的域名的url scrapy不会发送请求及进行相关处理。

start_urls

start_urls - 定义spider开始爬取数据的url列表。随后生成的其它需要爬取的url都会是从这些url对应的页面中提取数据生成出来的。

custom_settings

custom_settings - 定义该spider配置的字典。这个配置会在项目范围内运行这个spider的时候生效。比如我们在setting.py中将 DEFAULT_REQUEST_HEADERS属性注释掉,运行爬虫将报500错误。 当执行某个爬虫时需要进行特定的设置,可以在custom_settings属性中进行自定义,以此来覆盖掉全局性的设置。

crawler

crawler - 定义spider实例绑定的crawler对象。这个属性是在初始化spider类时由from_crawler()方法设置的。crawler对象概括了许多项目的组件。

settings

settings - 运行spider的配置。这是一个settings对象的实例。

logger

logger - 用spider名字创建的python记录器。可以用来发送日志消息。

from_crawler

from_crawler(crawler, *args, **kwargs) - scrapy用于创建spiders的类方法。一般都不需要重写这个方法,因为默认的实现是作为一个__init__()方法的代理,传参数args和kwargs来调用它。这个方法就是用来在新的spider实例中设置crawler和settings属性的,以便之后在spider的代码中可以访问。

参数:

  • crawler(crawler实例)- spider将绑定的crawler
  • args(list)- 传递给__init__()方法的参数
  • kwargs(字典)- 传递给__init__()方法的关键字参数

start_requests()

start_requests() - 这个方法必须返回该spider的可迭代(iterable)的初始requests对象供后续爬取。Scrapy会在该spider开始爬取数据时被调用,且只会被调用一次,因此可以很安全的将start_requests()做为一个生成器来执行。默认的执行会生成每一个在start_urls中的url对应的request对象。

如果想修改开始爬取一个域名的requests对象,以下是重写的方法(你需要开始用POST请求先登录系统):

parse(response)

parse(response) - Scrapy默认的回调用来处理下载的response。parse方法负责处理response,返回爬取的数据或者还有继续爬取的url(request对象)。其他requests回调方法与Spider类有相同的要求。这个方法与其它的request回调一样,必须返回可迭代的request对象、字典或Item对象。

参数:

  • response(Response对象)- 需要解析的response
  • log(message[, level, component]) - 通过Spider的记录器包装发送的日志信息,保持与之前的兼容性。
  • closed(reason) -
    当Spider关闭的时候调用的方法。这个方法为spider_closed提供了一个信号给signals.connect()。

看个例子:

一个回调方法返回多个requests对象和items:

如果不使用start_urls,还可以直接使用start_requests()方法;要使数据更具结构化可以使用Items:

Spider的参数

可以通过设置Spider的参数来修改它的某些属性。一般的用法是定义Spider开始爬取数据的URL或限制爬取网站的指定部分的数据,但是它其实还可以用于设置Spider的任何功能。Spider的参数是通过crawl命令的-a选项来传递给Spider的,如:

  • (scrapyEnv) MacBook-Pro:~ $ scrapy crawl myspider -a
    category=electronics

这些参数都可以在Spider的__init__方法中访问到:

默认的__init__方法会将传递来的参数作为Spider的属性,所以还可以通过Spider的属性访问命令行中设置的Spider参数,如:

注意:Spider的参数只能是字符串格式,对于参数Spider是不会进行任何解析的。如果你在命令行中设置了start_urls参数,那你必须手动的在Spider中将它转换成list然后把list设置为Spider的属性,否则Spider会将字符串格式的参数start_urls中的每一个字符当成一个单独的url去生成Request对象。

一个通过HttpAuthMiddleWare设置http认证证书还有通过UserAgentMiddleware设置user agent的例子:

  • (scrapyEnv) MacBook-Pro:~ $ scrapy crawl myspider -a http_user=myuser
    -a http_pass=mypassword -a user_agent=mybot

Spider的参数也可以通过Scrapyd的schedule.json API来传递。

更多信息请参考官方文档
https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/spiders.html

Python-玩转数据-Scrapy中Spiders相关推荐

  1. python中的条件判断稀硫酸_大学mooc2020用Python玩转数据期末考试查题公众号答案...

    大学mooc2020用Python玩转数据期末考试查题公众号答案 更多相关问题 下列表述或叙述中,正确的是().A.1 mol氢B.3 mol H2C.2 mol氢分子D.1 mol H 相同质量的钠 ...

  2. 大学python选择题题库及答案_大学慕课用Python玩转数据题库及答案

    大学慕课用Python玩转数据题库及答案 更多相关问题 (19分)电解原理在化学工业中有广泛应用.右图表示一个电解池,装有电解液c :A.B是两块电极板,通过导线与直流 用铂电极电解CuCl2与CuS ...

  3. python好学吗mooc中文网-2020年大学mooc用Python玩转数据作业答案

    2020年大学mooc用Python玩转数据作业答案 更多相关问题 一台电脑先涨价着一%,后降价2一%,这台电脑一现价同原价相比是()A.一样的B.降低了C.提高了直接写出9数 3÷地下%=6×3下% ...

  4. python好学吗mooc中文网-用Python玩转数据

    spContent=欢迎来到<用Python玩转数据>,这是第10次开课,大壮老师会尽量用非计算机专业(需要有一些编程基础,最好学过一门程序设计语言,但不一定是Python)小伙伴们能听懂 ...

  5. pythonzerojudge题库及答案_大学mooc2020用Python玩转数据试题及答案

    大学mooc2020用Python玩转数据试题及答案 更多相关问题 胆汁酸生成的限速酶是: [单选题]以下哪个是结核治疗策略: [单选题]胆汁酸生成的限速酶是: [判断题]仰光大金塔塔体是在3层大台基 ...

  6. 确实会玩!教你用Python玩转数据~

    向大家推荐一个南京大学的公开课--用Python玩转数据 授课老师张莉博士是南京大学计算机科学与技术系副教授,主要研究领域为数据挖掘和自然语言处理.张老师上课走亲切风冷幽默路线,跟同学们相处愉快,常常 ...

  7. PDF课件下载!《用Python玩转数据》

    向大家推荐一个南京大学的公开课--用Python玩转数据 授课老师张莉博士是南京大学计算机科学与技术系副教授,主要研究领域为数据挖掘和自然语言处理.张老师上课走亲切风冷幽默路线,跟同学们相处愉快,常常 ...

  8. 用python玩转数据慕课答案第四周_大学慕课用Python玩转数据章节测试答案

    大学慕课用Python玩转数据章节测试答案 更多相关问题 渗透泵型片剂控释的基本原理是A.减小溶出B.减慢扩散C.片剂膜外渗透压大于片剂膜内,将片内药物从 语义学批评是什么? As usual, __ ...

  9. python单选题库答案_大学慕课2020用Python玩转数据题库及答案

    大学慕课2020用Python玩转数据题库及答案 更多相关问题 [单选] 补偿滑轮组中动滑轮槽偏转角度不大于(). [单选] 30型杵环杆长度是(). [单选] 上下行分段绝缘器的空气间隙应达到()及 ...

  10. 2020python考试题库_大学mooc2020用Python玩转数据期末考试公众号答案

    大学mooc2020用Python玩转数据期末考试公众号答案 更多相关问题 如图5-21所示,电路由对称三相电源供电.已知,R=XL=XC=44Ω,求. 根据以下资料,回答题:夏天公司2013年5月应 ...

最新文章

  1. python小项目推荐项目-推荐 10 个有趣的 Python 项目
  2. 004_Mysql数据库的CRUD的操作
  3. 推荐系统笔记(开源工具)
  4. thinkphp的匹配php后缀,ThinkPHP的后缀操作方法配置 罢工了
  5. linux切换图片的代码,cacaview – Linux终端下将图片转换ASCII Art代码图案
  6. Android中使用HttpClient实现HTTP通信效果
  7. CISCO 防火墙建立穿越NAT的×××几种解决方法
  8. 销户c语言,c – 如何在注销时优雅地退出QApplication?
  9. android工程中的软件,通过Android Studio创建Android应用程序(附带解析)
  10. mysql if join_如何在MySQL中使用JOIN编写正确的If … Else语句?
  11. Jmeter插件安装及使用
  12. Gather more plan statistics by gather_plan_statistics hint
  13. 乐高ev3搭建图_你所不知道的乐高EV3发展史
  14. MAC下切换多个IP的Shell脚本
  15. matlab互相关函数并画图,自相关函数和互相关函数的matlab计算和作图
  16. VC6中如何让改变控件Botton的字体(大小和字体)
  17. android七牛短视频sdk源码,七牛短视频sdk,七牛android直播端必须用七牛提供的sdk吗...
  18. Altium Designer 3D元件库,PCB封装库,极为全面一份足以
  19. 喝酒聚会神器小程序部署
  20. 网站访客QQ获取系统

热门文章

  1. 解决雷神笔记本风扇声音太响太吵问题
  2. java 日期 面试题_Java面试试题日期和时间
  3. win10把用户中文名改为英文名
  4. sever企业版密钥 sql_SQL Server2016企业版 附全版本key(转载)
  5. html音乐播放心得体会,听音乐讲座心得体会范文3篇
  6. FPGA开发板公司及产品系列
  7. Python爬取上交所年报下载并转成TXT
  8. 用Python实现温度转换程序
  9. 优秀网页翻译:关于您的下一个汽车友好型原型
  10. 红贝应用架构配置式应用开发示例