scrapy实践之翻页爬取的实现

安装

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 翻页爬取内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • scrapy spider的几种爬取方式实例代码

    本节课介绍了scrapy的爬虫框架,重点说了scrapy组件spider. spider的几种爬取方式: 爬取1页内容 按照给定列表拼出链接爬取多页 找到'下一页'标签进行爬取 进入链接,按照链接进行爬取 下面分别给出了示例 1.爬取1页内容 #by 寒小阳(hanxiaoyang.ml@gmail.com) import scrapy class JulyeduSpider(scrapy.Spider): name = "julyedu" start_urls = [ 'https:

  • Python下使用Scrapy爬取网页内容的实例

    上周用了一周的时间学习了Python和Scrapy,实现了从0到1完整的网页爬虫实现.研究的时候很痛苦,但是很享受,做技术的嘛. 首先,安装Python,坑太多了,一个个爬.由于我是windows环境,没钱买mac, 在安装的时候遇到各种各样的问题,确实各种各样的依赖. 安装教程不再赘述.如果在安装的过程中遇到 ERROR:需要windows c/c++问题,一般是由于缺少windows开发编译环境,晚上大多数教程是安装一个VisualStudio,太不靠谱了,事实上只要安装一个WindowsS

  • 使用Scrapy爬取动态数据

    对于动态数据的爬取,可以选择selenium和PhantomJS两种方式,本文选择的是PhantomJS. 网址: https://s.taobao.com/search?q=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-it

  • 在scrapy中使用phantomJS实现异步爬取的方法

    使用selenium能够非常方便的获取网页的ajax内容,并且能够模拟用户点击和输入文本等诸多操作,这在使用scrapy爬取网页的过程中非常有用. 网上将selenium集成到scrapy的文章很多,但是很少有能够实现异步爬取的,下面这段代码就重写了scrapy的downloader,同时实现了selenium的集成以及异步. 使用时需要PhantomJSDownloadHandler添加到配置文件的DOWNLOADER中. # encoding: utf-8 from __future__ i

  • Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码

    大家可以在Github上clone全部源码. Github:https://github.com/williamzxl/Scrapy_CrawlMeiziTu Scrapy官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html 基本上按照文档的流程走一遍就基本会用了. Step1: 在开始爬取之前,必须创建一个新的Scrapy项目. 进入打算存储代码的目录中,运行下列命令: scrapy startproject CrawlMe

  • Python使用Scrapy爬取妹子图

    Python Scrapy爬虫,听说妹子图挺火,我整站爬取了,上周一共搞了大概8000多张图片.和大家分享一下. 核心爬虫代码 # -*- coding: utf-8 -*- from scrapy.selector import Selector import scrapy from scrapy.contrib.loader import ItemLoader, Identity from fun.items import MeizituItem class MeizituSpider(sc

  • Scrapy框架爬取西刺代理网免费高匿代理的实现代码

    分析 需求: 爬取西刺代理网免费高匿代理,并保存到MySQL数据库中. 这里只爬取前10页中的数据. 思路: 分析网页结构,确定数据提取规则 创建Scrapy项目 编写item,定义数据字段 编写spider,实现数据抓取 编写Pipeline,保存数据到数据库中 配置settings.py文件 运行爬虫项目 代码实现 items.py import scrapy class XicidailiItem(scrapy.Item): # 国家 country=scrapy.Field() # IP

  • Python Scrapy图片爬取原理及代码实例

    1.在爬虫文件中只需要解析提取出图片地址,然后将地址提交给管道 在管道文件对图片进行下载和持久化存储 class ImgSpider(scrapy.Spider): name = 'img' # allowed_domains = ['www.xxx.com'] start_urls = ['http://www.521609.com/daxuemeinv/'] url = 'http://www.521609.com/daxuemeinv/list8%d.html' pageNum = 1 d

  • scrapy实践之翻页爬取的实现

    安装 Scrapy的安装很简单,官方文档也有详细的说明 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html .这里不详细说明了. 在scrapy框架中,spider具有以下几个功能 1. 定义初始爬取的url 2. 定义爬取的行为,是否跟进链接 3. 从网页中提取结构化数据 所谓的跟进链接,其实就是自动爬取该页的所有链接,然后顺着对应的链接延伸开来不断爬取,这样只需要提供一个网站首页,理论上就可以实现网站全部页面的爬取,实

  • python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

    基本思路: 首先用开发者工具找到需要提取数据的标签列 利用xpath定位需要提取数据的列表 然后再逐个提取相应的数据: 保存数据到csv: 利用开发者工具找到下一页按钮所在标签: 利用xpath提取此标签对象并返回: 调用点击事件,并循环上述过程: 最终效果图: 代码: from selenium import webdriver import time import re class Douyu(object): def __init__(self): # 开始时的url self.start

  • Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单

    此货很干,跟上脚步!!! Cookie cookie是什么东西? 小饼干?能吃吗? 简单来说就是你第一次用账号密码访问服务器 服务器在你本机硬盘上设置一个身份识别的会员卡(cookie) 下次再去访问的时候只要亮一下你的卡片(cookie) 服务器就会知道是你来了,因为你的账号密码等信息已经刻在了会员卡上 需求分析 爬虫要访问一些私人的数据就需要用cookie进行伪装 想要得到cookie就得先登录,爬虫可以通过表单请求将账号密码提交上去 但是在火狐的F12截取到的数据就是, 网易云音乐先将你的

  • python scrapy拆解查看Spider类爬取优设网极细讲解

    目录 拆解 scrapy.Spider scrapy.Spider 属性值 scrapy.Spider 实例方法与类方法 爬取优设网 Field 字段的两个参数: 拆解 scrapy.Spider 本次采集的目标站点为:优设网 每次创建一个 spider 文件之后,都会默认生成如下代码: import scrapy class UiSpider(scrapy.Spider): name = 'ui' allowed_domains = ['www.uisdc.com'] start_urls =

  • python爬虫智能翻页批量下载文件的实例详解

    python爬虫遇到爬取文件内容时,需要一页页的翻页爬取,这样很是麻烦,其实可以获取每个列表信息下的文件名和文件链接,让文件名和文件链接处理为列表,保存后下载,实现智能翻页批量下载文件,本文以以京客隆为例,批量下载文件,如财务资料,他的每一份报告都是一份pdf格式的文档.以此页面为目标,下载他每个分类的文件python爬虫实战之智能翻页批量下载文件. 1.引入库 import requests import pandas as pd from lxml import etree import r

  • python爬取股票最新数据并用excel绘制树状图的示例

    大家好,最近大A的白马股们简直 跌妈不认,作为重仓了抱团白马股基金的养鸡少年,每日那是一个以泪洗面啊. 不过从金融界最近一个交易日的大盘云图来看,其实很多中小股还是红色滴,绿的都是白马股们. 以下截图来自金融界网站-大盘云图: 那么,今天我们试着用python爬取最近交易日的股票数据,并试着用excel简单绘制以下上面这个树状图.本文旨在抛砖引玉,吼吼. 1. python爬取网易财经不同板块股票数据 目标网址: http://quotes.money.163.com/old/#query=hy

  • Python自动化爬取天眼查数据的实现

    首先要注册一个账号密码,通过账号密码登录,并且滑块验证,自动输入搜索关键词,进行跳转翻页爬取数据,并保存到Excel文件中. 代码运行时,滑块验证经常不通过,被吃掉,但是发现打包成exe运行没有这个问题,100%成功登录.如果大家知道这个问题麻烦请与我分享,谢谢! 废话不多说直接上代码 # coding=utf-8 from selenium import webdriver import time from PIL import Image, ImageGrab from io import

  • Python Scrapy实战之古诗文网的爬取

    目录 需求 1. Scrapy项目创建 2. 全局配置 settings.py 3. 爬虫程序.py 4. 数据结构 items.py 5. 管道 pipelines.py 6. 程序执行 start.py 需求 通过python,Scrapy框架,爬取古诗文网上的诗词数据,具体包括诗词的标题信息,作者,朝代,诗词内容,及译文.爬取过程需要逐页爬取,共4页.第一页的url为(https://www.gushiwen.cn/default_1.aspx). 1. Scrapy项目创建 首先创建Sc

  • Python使用scrapy爬取阳光热线问政平台过程解析

    目的:爬取阳光热线问政平台问题反映每个帖子里面的标题.内容.编号和帖子url CrawlSpider版流程如下: 创建爬虫项目dongguang scrapy startproject dongguang 设置items.py文件 # -*- coding: utf-8 -*- import scrapy class NewdongguanItem(scrapy.Item): # define the fields for your item here like: # name = scrapy

随机推荐