(2)分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍
本篇主要介绍对于一个爬虫框架的思考和,核心部件的介绍,以及常规的思考方法:
一,猜想
我们说的爬虫,一般至少要包含几个基本要素:
1.请求发送对象(sender,对于request的封装,防止被封)
2.解析文档对象(将请求的网页当作是html文档还是字符串)
3.承载所需要的解析对象(标准格式的数据承载者)
4.获取所需对象后的操作者 (得到对象后,是以文件形式保存还是存入数据库)
5.整个流程的错误处理者(整个流程的异常监控者)
二,验证
我们来看看Scrapy 提供了哪些核心的对象
基本概念
- 命令行工具(Command line tools)
- 学习用于管理Scrapy项目的命令行工具
- Items
- 定义爬取的数据
- Spiders
- 编写爬取网站的规则
- 选择器(Selectors)
- 使用XPath提取网页的数据
- Scrapy终端(Scrapy shell)
- 在交互环境中测试提取数据的代码
- Item Loaders
- 使用爬取到的数据填充item
- Item Pipeline
- 后处理(Post-process),存储爬取的数据
- Feed exports
- 以不同格式输出爬取数据到不同的存储端
- Link Extractors
- 方便用于提取后续跟进链接的类。
refer from :https://scrapy-chs.readthedocs.org/zh_CN/0.24/
基本上我们所设想的对象Scrapy都会包含在里面了
三,爬取
我们知道,一般爬虫都是按如下规则来爬取数据的
输入目标网址=> 编写处理规则(正则表达式或者xpath语法)=>对得到的数据进行处理
Scrapy的做法如下:
1)新建一个项目
以命令行形式切换到需要将代码放置的文件夹下,然后输入如下命令:
1 | scrapy startproject cnblogs |
文件夹下会生成一个cnblogs的文件下,切换到该文件夹下(记住切换)
Item.py就是我们所需要数据承载器
修改为如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html import scrapy from scrapy.item import Field,Item class CnblogsItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() Title = Field() TitleUrl = Field() |
在Spider文件夹下添加BasicGroupSpider.py 修改为如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector from cnblogs.items import CnblogsItem class CnblogsSpider(BaseSpider): name = "cnblogs" #spider的名字 allowed_domains = [ "cnblogs.com" ] start_urls = [ 'http://www.cnblogs.com/' ] #待抓取的列表 def parse( self , response): self .log( "Fetch douban homepage page: %s" % response.url) hxs = HtmlXPathSelector(response) #authors = hxs.select('//a[@class="titlelnk"]') items = hxs.select( '//a[contains(@class, "titlelnk")]' ) listitems = [] for author in items: #print author.select('text()').extract() item = CnblogsItem() #property item[ 'Title' ] = author.select( 'text()' ).extract() item[ 'TitleUrl' ] = author.select( '@href' ).extract() listitems.append(item) return listitems |
OK ,回到第一步的命令台的界面,输入如下命令
1 | scrapy crawl cnblogs - - logfile = test.log - o cnblogs.json - t json |
四,结果
关于里面的代码功能,自己去理解吧,写过代码的人大致都了解。
====>DEMO下载<====
总结:
本次主要分析了爬虫框架的大致构件,并验证了我们的猜想,关于python的爬虫框架有很多,不过像scrapy这样值得入手和研究的,比较少了,.net下的更少了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?