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中使用next()方法操作文件的教程
May 24 Python
Python图算法实例分析
Aug 13 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
python实现日常记账本小程序
Mar 10 Python
python实现简易通讯录修改版
Mar 13 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
在python中利用opencv简单做图片比对的方法
Jan 24 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
Python中bisect的使用方法
Dec 31 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
详解vue组件基础
2018/05/04 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
更改Python命令行交互提示符的方法
2015/01/14 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python中数据库like模糊查询方式
2020/03/02 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
小区文明倡议书
2014/05/16 职场文书
体操比赛口号
2014/06/10 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
大连星海广场导游词
2015/02/10 职场文书
小学端午节活动总结
2015/02/11 职场文书
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js