安装
Scrapy的安装很简单,官方文档也有详细的说明 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html 。这里不详细说明了。
在scrapy框架中,spider具有以下几个功能
1. 定义初始爬取的url
2. 定义爬取的行为,是否跟进链接
3. 从网页中提取结构化数据
所谓的跟进链接,其实就是自动爬取该页的所有链接,然后顺着对应的链接延伸开来不断爬取,这样只需要提供一个网站首页,理论上就可以实现网站全部页面的爬取,实现点到面的功能。
如果自己来开发,不仅需要在算法层面,考虑是使用深度优先还是广度优先,还需要处理好提取的url的限制条件等细节工作。在scrapy中,开发过程被大大简化了,我们只需要定义以下几个关键部分的代码,就可以实现翻页效果。
1. Spider
核心思想是在parse方法中,返回新的Requests请求,代码如下
import scrapy from hello_world.items import HelloWorldItem class MirSpider(scrapy.Spider): name = "MirSpider" start_urls = ["http://mirtarbase.cuhk.edu.cn/php/search.php"] def parse(self, response): domain = 'http://mirtarbase.cuhk.edu.cn' for row in response.xpath('//table/tr'): item = HelloWorldItem() res = [] for col in (row.xpath('td/text()')): res.append(col.extract()) if res[0] != 'Bos taurus': continue item['species'] = res[0] item['miRNA'] = res[2] item['target'] = res[3] item['total'] = res[4] item['papers'] = res[5] yield item for url in response.xpath('//a/@href').extract(): if 'page' in url: url = domain + url yield scrapy.Request(url, callback = self.parse, dont_filter = False)
关键代码是最后几行的for循环,在start_urls中,我们只提供了一个初识的url, 在parse方法中,除了常规的返回结构性数据item外,我们还返回了新的requests请求,首先提取页面上所有的url, 并对url的链接进行了限制,对需要爬取的url链接以Request的方法进行返回,注意dont_filter的设置,当设置为False时,会调用scrapy默认的url去重机制,这样不会重复下载。
2. Item Pipeline
对于下载的item, 有些会出现重复的现象,此时可以在pipelines.py中,对item进行操作,实现item去重的代码如下
from itemadapter import ItemAdapter class HelloWorldPipeline: def __init__(self): self.link_set = set() def process_item(self, item, spider): link = item['miRNA'] + item['target'] if link in self.link_set: raise DropItem(item) self.link_set.add(link) return item
在process_item方法中,通过一个set对象来达到去重的效果。需要注意,默认pipelines是没有开启的,编写完代码之后,需要在settings.py中进行配置,开启对应的pipeline, 内容如下
ITEM_PIPELINES = { 'hello_world.pipelines.HelloWorldPipeline': 300, }
对于标准的多页表格数据,采用上述的代码可以轻松实现翻页效果,非常的方便。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 群星《戏梦》[FLAC/分轨][308.4MB]
- 魔兽世界永久60级什么时间开 永久60级开启时间介绍
- 魔兽世界奥卡兹岛血藻刷新点一览 wlk奥卡兹岛血藻刷新位置介绍
- 英雄联盟s14中国队种子怎么排名 s14中国队种子队伍排名一览
- 柏菲·梁玉嵘《知音梁品》限量开盘母带ORMCD[低速原抓WAV+CUE]
- [东升唱片]孙露《寂寞诱惑AQCD》高码率[FLAC]
- 群星-第8届2012十大发烧唱片精选HQ2CD[WAV+CUE]
- 九号公司两轮电动安全季行动圆满收官:为行业树立安全管理新标杆
- 创新驱动未来 中国移动5G云游戏深化智能运维应用推动行业发展
- 大型手游“帧数拉满” 骁龙8至尊版游戏表现强悍
- 谢金燕.2002-YOYO姊妹【华特】【WAV+CUE】
- 群星.1994-摇滚列车【音乐家】【WAV+CUE】
- 陈艾湄.1996-牵绊【巨翼】【WAV+CUE】
- 群星《无法抗拒的谎言 电视剧原声带》[320K/MP3][69.98MB]
- 群星《无法抗拒的谎言 电视剧原声带》[FLAC/分轨][372.04MB]