本文章允许在知识共享署名-相同方式共享3.0协议和GNU自由文档许可证下修改和再使用。
本文并不涉及一个具体的scrapy如何创建与实现,只是罗列出我对于这个框架的一些思索以及一些我不太清楚或没用过的知识点,权当笔记、用以复习:
Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求进行修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持[1]。
整个Scrapy框架为5+2结构,分别对应为spider、engine、scheduler、downloader、pipeline以及spider middleware和downloader middleware,各个模块的功能职责分别为:
1.spider:作为整个工程的起点,主要工作是产生要爬取的网页的链接以及处理从downloader返回的response。通过指令scrapy genspider spidername生成。具体实现需要用户进行自定义。
2.engine:负责调度的模块,一般不需修改。Spider的请求即通过此模块通往scheduler模块。
3.scheduler:顾名思义,用以调度spider的爬取请求,在此产生的请求是真实的请求,通过engine模块传给downloader。
4.downloader:此模块会对网页进行爬取,一般不做改动。
5.pipeline:处理从spider处获得的item项,用以对数据进行去重、或入库等,需要用户自定义。
- 可以在scrapy中引入日志,举例如下:123456import logginglogger = logging.getLogger(‘mycostomlogger’)class MySpider(Scrapy.spider):...def parse(self,response):Logger.info(‘content’,response.url)
此时在settings.py中配置logger
- 可以使用scrapy内置的发送邮件模块:123from scrapy.mail import Mailsendermailer = MailSender()//smtphost、mailfrom、smtpuser、smtppass、smtpportmailer.send(to=[],subject,body,cc,attaches)
我感觉这个模块可以用来监测某个网页的信息,一旦发生变化可以立即通知相关单位。。。
- 可以使用代理ip来对网页进行爬取:
一个叫“西刺”的网站提供免费代理ip,可以使用这种手段来应对server对爬虫的封锁。 - 在多级页面爬取时,在parse函数中,可以使用如下代码来进行item的传递:1yield scrapy.Request(url=...,meta={‘item’:item},callback=self.parse_detail)
在parse_detail中:
并且,如果要求是存成excel,可以先存csv,再另存为。
[1] 百度百科