欢迎关注”生信修炼手册”!
在scrawww.yii666.compy框架中,spider具有以下几个功能
1. 定义初始爬取的url
2. 定义爬取的行为,是否跟进链接
3. 从网页中提取结构化数据
所谓的跟进链接,其实就是自动爬取该页的所有链接,然后顺着对应的链接延伸开来不断爬取,这样只需要提供一个网站首页,理论上就可以实现网站全部页面的爬取,实现点到面的功能。
如果自己来开发,不仅需要在算法层面,考虑是使用深度优先还是广度优先,还需要处理好提取的url的限制条件等细节工作。在scrapy中,开发过程被大大简化了,我们只需要定义以下几个关键部分的代码,就可以实现翻页效果。
1. Spider
核心思想是在parse方法中,返回新的Requests请求,代码如下
importscrapy
fromhello_world.items importHelloWorldItem
classM文章来源地址36689.htmlirSpider(scrapy.Spider):
name = "MirSpider"
start_urls = ["http://mirtarbase.cuhk.edu.cn/php/search.php?opt=species&org=bta&sort=id&order=asc&page=1"]
defparse(self, response):
domai文章来源站点https://www.yii666.com/n = 'http://mirtarbase.cuhk.edu.cn'
forrow inresponse.xpath('//table/tr'):
item = HelloWorldItem()
res = []
forcol in(row.xpath('td/text()')):
res.append(col.extract())
ifres[0] != 'Bos taurus':
continue
item['species'] = res[0]
item['miRNA'] = res[2]
item['target'] = res[3]
item['total'] = res[4]
item['papers'] = res[5]
yielditem
forurl inresponse.x文章来源地址36689.htmlpath('//a/@href').extract():
if'page'inurl:
url = domain + url
yieldscrapy.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
classHelloWorldPipeline:
def__init__(self):
self.link_set = set()
defprocess_item(self, item, spider):
link = item['miRNA'] + item['target']
iflink inself.link_set:
raise DropItem(item)
self.link_set.add(link)
returnitem
在process_item方法中,通过一个set对象来达到去重的效果。需要注意,默认pipelines是没有开启的,编写完代码之后,需要在settings.py中进行配置,开启对应的pipeline, 内容如下
ITEM_PIPELINES = {
'hello_world.pipelines.HelloWorldPipeline': 300,
}
对于标准的多页表格数据,采用上述的代码可以轻松实现翻页效果,非常的方便。
end
—如果喜欢,快分享给你的朋友们吧—
原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!
本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
更多精彩
KEGG数据库,除了pathway你还知道哪些
全网最完整的circos中文教程
DNA甲基化数据分析专题
突变检测数据分析专题
mRNA数据分析专题
lncRNA数据分析专题
circRNA数据分析专题
miRNA数据分析专题
单细胞转录组数据分析专题
chip_seq数据分析专题
Hi-www.yii666.comC数据分析专题
HLA数据分析专题
TCGA肿瘤数据分析专题
基因组组装数据分析专题
CNV数据分析专题
GWAS数据分析专题
2018年推文合集
2019年推文合集
写在最后
转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。
扫描下方二维码,关注我们,解锁更多精彩内容!
一个只分享干货的
生信公众号