python滚动条翻页爬取数据_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的链接进行了限制,对需要爬取的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滚动条翻页爬取数据_scrapy实践之翻页爬取的实现相关推荐
- python爬虫抓取分页_Scrapy爬虫框架之Scrapy爬取分页数据(一)
Python应用场景 Scrapy 爬虫框架 课程特色 时间就是生命,浓缩才是精华 (4小时,完成了Scrapy爬虫必备知识点讲解) 课程体系完整 ( 应用场景.Scrapy体系结构.分页爬虫.整站爬 ...
- python爬虫爬网站数据登录_使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)...
urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...
- python文本聚类 词云图_数据思维实践 | TASK 12 文本分析
原标题:数据思维实践 | TASK 12 文本分析 文本分析可以干什么 生活中文本无处不在,网页上的新闻.证券分析师的研究报告.政府工作报告等等,这些都是文本.如何从文本中挖掘价值是文本分析需要回答的 ...
- python 分组箱线图_Python数据科学实践 | 绘图模块4
点击关注了解更多精彩内容!! 大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧.本期内容主要由智亿同学与政委联合推出. 本次将继续学习如何用Plotly绘制更加美观的统计图.具体的, ...
- python爬虫,请教一下为何我爬取数据有的完整有的不完整 爬的百家号 登陆这一块还没解决 但关注这一块很难解决
下面附上我的代码.求教一下. 我该考虑的东西都考虑 是加载的时候认为我是爬虫么? from selenium import webdriver import time from pyquery imp ...
- 爬取数据是违法的吗_爬取生意参谋数据是不是违规行为?有什么后果呢?
最近看了几个电商插件,比如爽歪歪啊店侦探啊等插件,都有对关键词等数据的一个侦测.但是最近阿里在打击爬取生意参谋数据的行为,很多人还不了解这种行为,今天小编就为大家做详细介绍. 官方推荐平台" ...
- python初学者爬取数据完整教程
都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便 简介 爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息 准备 IDE:pyChar ...
- Python爬虫之豆瓣电影评论数据的爬取(十四)
原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...
- Python实训day07am【爬取数据接口、webdriver、自动化测试工具selenium】
Python实训-15天-博客汇总表 目录 1.网络爬虫-课后练习题 1.1.写法1 1.2.写法2 2.Selenium自动化测试工具 2.1.安装工具 2.2.命令行操作 直接爬取HTML (30 ...
- python爬取数据热点词生成词云
这是当时在中国mooc学 用python玩转数据 时,写的一个小demo. 程序实现步骤 1.从某一网站爬取数据,比如我是在豆瓣爬取的书评 利用Requests库的get()爬取网页 使用Beatif ...
最新文章
- Micron Flash芯片识别心得
- React Native 之 网络请求 fetch
- 学python工资高吗-Python工资一般是多少 看完吓你一跳
- 6月5日,IBM“云有‘智’,事竟成”大会邀您莅临!
- Redis入门第二篇【存储数据结构之string类型】
- cmd oracle 连接实例_基于winserver的Oracle数据库跨版本下的rman备份恢复
- 下载不了java应用程序_Java 7u45 - java webstart不会下载我的jar并执行应用程序,除非我显示java控制台...
- 媒体查询 200304
- 在windows上搭建redis集群(Redis-Sentinel)
- jquery中几种层级选择器的详细说明
- C++ 从入门到入土(English Version)Section 9 : Computer Graphics and Command Prompt
- samsung-smart app 开发
- Windows Live Writer Technical Preview 公布下载
- 为Navicat ER图增添字段备注
- excel 函数 用=引用后,筛选功能排序,结果引用位置错乱
- html在手机显示时间,手机北京时间校准
- UVa Problem 10310 Dog and Gopher (狗拿地鼠)
- insert...on duplicate key update语法详解
- 数据挖掘面试题(1)
- 对抗鲁棒性使得神经网络又强又怂
热门文章
- AFNetworking实现程序重新启动时的断点续传
- Android模拟器的建立以及HelloWorld的编写
- Spring使用XML的方式实现AOP的开发——Spring AOP(六)
- C/C++回调方式系列之一 函数指针和函数回调模式
- 小程序学习笔记(7)-使用小程序的组件构建UI界面
- python模型参数估计_python – 从scipy.optimize.curve_fit获取与参数估计值相关的标准错误...
- c语言sqlite3删除最后一行,sqlite学习笔记11:C语言中使用sqlite之删除记录
- 苹果手机使用说明书_使用苹果手机怎么设置重要提醒事项?
- java web jsp页面,jsp引入页面 Java Web JSP详解(下)
- linux eclipse memory,Linux下安装JDK和Eclipse