scrapy实践之翻页爬取

欢迎关注”生信修炼手册”!

在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?opt=species&org=bta&sort=id&order=asc&page=1"]

    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的链接进行了限制&#

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值