scrapy实践之翻页爬取的实现


Posted in Python onJanuary 05, 2021

安装

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?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的链接进行了限制,对需要爬取的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,
}

对于标准的多页表格数据,采用上述的代码可以轻松实现翻页效果,非常的方便。

到此这篇关于scrapy实践之翻页爬取的实现的文章就介绍到这了,更多相关scrapy 翻页爬取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python采集腾讯新闻实例
Jul 10 Python
python修改注册表终止360进程实例
Oct 13 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
python自定义异常实例详解
Jul 11 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
numpy中loadtxt 的用法详解
Aug 03 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
如何表示python中的相对路径
Jul 08 Python
基于selenium及python实现下拉选项定位select
Jul 22 Python
Python内置函数property()如何使用
Sep 01 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
python里glob模块知识点总结
Jan 05 #Python
python用opencv 图像傅里叶变换
Jan 04 #Python
python基于opencv 实现图像时钟
Jan 04 #Python
python基于opencv实现人脸识别
Jan 04 #Python
利用python绘制正态分布曲线
Jan 04 #Python
Python 打印自己设计的字体的实例讲解
Jan 04 #Python
Python关于拓扑排序知识点讲解
Jan 04 #Python
You might like
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
javascript中的array数组使用技巧
2010/01/31 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
shell程序中如何注释
2012/01/28 面试题
医学专业个人求职自荐信格式
2013/09/23 职场文书
甲方资料员岗位职责
2013/12/13 职场文书
大学生创业策划书
2014/02/02 职场文书
运动会演讲稿200字
2014/08/25 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
2016年教师新年寄语
2015/08/18 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python