Scrapy教程 - (3)如何翻頁爬取更多資料

使用scrapy创建一个爬虫爬取优快云的瀑布流 1、创建项目 scrapy startproject 优快云 cd 优快云 scrapy genspider csdn www.youkuaiyun.com 2、分析网页 然后首先应该是要对这个页面进行xpath分析,抓取这些元素 然后随便点进里面的一个标题,再分析网页,这里点击的标题是python,然后下拉网页,发现它没有分页,获取新数据的方式是下拉页面,也就是瀑布流。然后... 阅读详情

前言

上个教程2完成了一个单页的简单爬虫,但是在实际应用上,我们不会只需要单页的数据,而是多页的数据。因此在爬取多页面数据前,我们要先观察网站/网页的页面变化,才能知道如何有效地获取下一页。

觀察頁面

首先,看一下首页网址:

// 首頁網址
https://books.toscrape.com/catalogue/page-1.html

然后看一下第一页尾,可以发现总共有50页,而且点击右下next可以到下一页。
在这里插入图片描述
接着继续观察第二页,

// 第二頁網址
https://books.toscrape.com/catalogue/page-2.html

一样有next可以往下一页,另外还有previous可以回前一页
在这里插入图片描述
这里我们做一个小结就是,每一页在转换的时候,网址是随着页数在改变的

// 第1頁
...page-1.html
// 第2頁
...page-2.html
// 以此類推,第50頁
...page-50.html

如何翻頁

记得教程2的parse function吗? 我们要在这个function里面加上解析下一页按钮的链接,如有,我们就让爬虫继续执行;如没有,则停止爬取

def parse(self, response):
	// page_num = 1
	// 找所有書籍的url
	books = response.xpath('//h3/a/@href').extract()
    for book in books:
    	// 將網址前綴與後綴結合
    	url = response.urljoin(book)
        yield response.follow(url = url,
                              callback = self.parse_book)
   // extract 下一頁 url,並發出請求
   next_page_url = response.xpath('//a[text()="next"]/@href').extract_first()
   absolute_next_page_url = response.urljoin(next_page_url)
   yield Request(absolute_next_page_url)

完整代碼

有一些部分,因为较为熟悉就不细述。如阅读者有疑问,欢迎于评论区留言讨论。

from scrapy import Spider
from scrapy.http import Request


class BookWithScrapySpider(Spider):
    name = 'book_with_scrapy'
    allowed_domains = ['books.toscrape.com']
    start_urls = ['http://books.toscrape.com']

    def parse(self, response):
        books = response.xpath('//h3/a/@href').extract()
        for book in books:
            url = response.urljoin(book)
            yield response.follow(url = url,
                                  callback = self.parse_book)

        # process next page
        next_page_url = response.xpath('//a[text()="next"]/@href').extract_first()
        absolute_next_page_url = response.urljoin(next_page_url)
        yield Request(url = absolute_next_page_url)

    def parse_book(self, response):
        title = response.xpath('//h1/text()').extract_first()
        price = response.xpath('//*[@class="price_color"]/text()').extract_first()

        image_url = response.xpath('//img/@src').extract_first()
        image_url = image_url.replace('../../', 'http://books.toscrape.com/') #need to change/ pattern

        rating = response.xpath('//*[contains(@class, "star-rating")]/@class').extract_first()
        rating = rating.replace('star-rating', '')

        description = response.xpath('//*[@id="product_description"]/following-sibling::p/text()').extract_first()

        # product information
        upc = product_info(response, 'UPC')
        product_type = product_info(response, 'Product Type')
        price_without_tax = product_info(response, 'Price (excl. tax)')
        price_with_tax = product_info(response, 'Price (incl. tax)')
        tax = product_info(response, 'Tax')
        availability = product_info(response, 'Availability')
        number_of_reviews = product_info(response, 'Number of reviews')


        yield {'title': title,
               'price': price,
               'image_url': image_url,
               'rating': rating,
               'description': description,
               'upc': upc,
               'product_type': product_type,
               'price_without_tax': price_without_tax,
               'price_with_tax': price_with_tax,
               'tax': tax,
               'availability': availability,
               'number_of_reviews': number_of_reviews
            }

瀑布流網站(infinite scroll)怎麼翻頁?

此文范例网站是一个爬虫示范网站,但常常real-world websites大部分都不是这样容易爬取的。你可能会遇到…要爬取网址不会变的网页,javascript rendered的网页, 或是使用infinite scroll的网页…等。特别在面对瀑布流网站,如果不使用逆向工程/API的话,目前最佳解应该就是selenium/playwright/puppeteer等模拟浏览器操作的工具,

以下以vlive為例:

options = Options()
#headless so browser can be instanced without showing the GUI
#options.add_argument("--headless")
options.add_argument('--disable-gpu')
options.add_argument("--incognito")
options.add_argument('user-agent="your_user_agent"')
    
vlive_driver = webdriver.Chrome("C:/Users/user/chromedriver_win32/chromedriver.exe", options = options)
vlive_driver.get("https://www.vlive.tv/channel/DCF447/board/1113")
vlive_driver.maximize_window()

# exclude login
# try to scroll the page when 'div' element show
while vlive_comment_driver.find_element_by_tag_name('div'):
    try:
        vlive_comment_driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)
    except TimeoutException as ex:
        print("Exception has been thrown. " + str(ex))
        break

vlive_driver.quit()

学习爬虫就是一边学爬,一边学反爬。 了解如何反爬,你才能更精进你的爬虫。

scrapy爬取动态页面 文章目录简介查看目标网站代码部分 简介 现在在整理原来写过的东西,这是一个比较简单的爬虫项目,就是进行动态页面的爬取,主要的难点是实现模拟点击。 查看目标网站 查看目标网站: 但是这不是我们的目标,我们要爬取的是点击热搜榜之后的热搜话题: 是这样的: 然后才能爬取,所以这是一个爬取动态页面的项目。 这里我用到了selenium库进行模拟操作,首先使用该库模拟点击然后进行数据的爬取。 要在sc... 阅读详情

相关推荐

python scrapy框架爬取CNKI数据

1、找到一个比官网更容易分析的接口,但貌似里头的信息不全,只有前76页的信息。 2、如何让scrapy按顺序爬取页面: 1)直接从网页中抓取下一页的url,不要自己定义: # -*- coding: utf-8 -*- import scrapy import re import time from CNKISpider.items import CnkispiderItem imp

weixin_40828973的博客 4211

scrapy中如何实现翻页抓取数据

scrapy中如何实现翻页抓取数据

ljf520lhy的博客 2489

使用Scrapy爬取美食网站

如今的爬虫技术主要还是人工定位信息位置, 本次爬取的对象是美食杰网站 使用的爬虫框架为scrpay 不得不说,scrapy的确十分好用, 尤其是scrapy shell,使用scrapy shell 写xpath非常的方便! import scrapy from cbspider.items import CbspiderItem import os import sqlite3 '...

理想技术国 2076

scrapy爬虫爬取多网页内容

scrapy爬虫

Changersh 3051

scrapy爬取多页面

前言 使用scrapy的目的是方便爬虫人员通过scrapy框架编写简单的代码,提取需要爬取的网站上有用的数据,其框架底层已经对爬虫的过程做了大量的逻辑处理,而爬虫人员只需按照指定的规则使用即可,个人觉得这其中最麻烦的工作在于分析要提取的网站html结构,然后使用解析器解析出需要的字段数据 在上一篇中,我们学会了使用scrapy爬取一个简单的网页,但那个是单页面的数据,现实中,很多网站的数据都是分页...

congge 7103

AWR射频仿真基本操作(一)

这里只讲述一个基本的操作: 软件是AWR 14版本

钢丝 2万+

爬虫-Scrapy(三) 翻页的实现

1. 翻页的实现 上一篇实现了单页的爬取,再加3行代码就可以实现翻页了。 基本思路是查找页面中‘下一页’按钮对应的href地址,然后回调parse方法实现循环,直至找不到’下一页’的链接为止。 QiubaiSpider.py import scrapy import re from scpy1.items import Scpy1Item class Qiubai1Spider(scrapy.Spider): name = 'qiubai1' allowed_domains = ['qiu

XiaoDao147258369的博客 3313

Potplayer + LAVFilters + madVR 配置教程

文章目录Potplayer + LAVFilters + madVR 配置教程工具安装篇设置调教1.potplayer播放器设置加载LAVFilters和madVR1.选择“源滤镜/分离器”选项,选择“滤镜/解码器管理”2.“添加外部滤镜”3.浏览到刚才LAVFilters解压的文件夹,分别添加图示项。4.添加后回到管理界面设置,点击左边的”LAV AudioDecoder”,将右边”音频解码器”...

re 16万+

Scrapy 爬取内容 并且翻页

需求:爬取每一个问政标题的内容 并且翻页 解决方案:通过Scrapy来实现需求 问政url: http://wz.sun0769.com/political/index/index 思路: 1.找到ul标签 2.找到li标签 3.找到li标签里面的href title 4.翻页 http://wz.sun0769.com/political/index/politicsNewest 第一页 http://wz.sun0769.com/political/index/politicsNewest?i

weixin_45905671的博客 537

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 476

图像配准方法之灰度信息法

这系列文章是5年前的,也是从自己的QQ(632846506)日志中移过来的。https://user.qzone.qq.com/632846506/infocenter。      图像配准的方法主要有三种:基于灰度信息方法;基于空间变换域方法;基于图像特征的方法。 一、灰度信息法。     灰度信息法直接利用两幅图像之间灰度度量的相似性,以图像内部的信息为依据,采用搜索方法寻找相似度最大或

月秀明竹的专栏 1万+

14爬虫:scrapy实现翻页爬取

:观察页面源代码,发现url直接在源代码中体现,对应的解决方案是:(1)访问第一页,(2)提取下一页url,(3)提取下一页url,一直重复该流程到最后一页。:观察页面源代码,发现url不能在源代码中体现,对应的解决方案是:直接观察页面总数,观察每一页url的变化规律,通过程序模拟出每一页的url。例如点击加载更多,或者鼠标向下滑动才能加载更多信息的分页逻辑属于不正常的分页。:加载更多,点击之后才可以加载下一页的内容。对应的解决方案是:通过抓包找到url的变化规律,。

qq_37587269的博客 1698

Kylin V10 ARM64离线安装ffmpeg实战指南

在国产化替代浪潮下,基于银河麒麟V10和ARM架构(如飞腾、鲲鹏)的内网服务器部署音视频处理服务成为常态。由于系统默认软件源缺乏aarch64包且无法连接外网,常规yum安装方式难以奏效。本文从离线安装的通用概念出发,剖析了在Kylin V10上安装ffmpeg的三大路线及其原理,重点介绍了源码编译法,包括依赖梳理、工具链准备、编译参数配置、常见错误排查等关键环节。同时,将这套依赖管理与离线部署方法论延伸至nginx、node.js、Python库及docker等场景,帮助读者建立一套可复用的国产化系统离线

weixin_33417488的博客 148

Scrapy入门-翻页爬取及抓取链接页内容

爬取目标 在前文《scrapy入门-环境安装及demo运行》中,我们了解了如何利用Scrapy框架进行单一网页的数据抓取。然而,很多场景下,想要抓取的数据比较多,会分好几页展示。一种常见的形式是,网站有一个索引页,索引页中包含许多列表项,同时有分页系统。点击索引页中的列表项,跳转到列表项对应的详情页中。 本文中,我们将以自如租房网页的抓取为例,介绍如何实现翻页爬取1-50页的租房列表爬取和每个房源链接详情页内容数据的爬取。 CrawlSpider Scrapy提供了一个CrawlSpider

千金散尽还复来 3854

别再写XPath改DOM了!用OpenClaw零代码搞定爬虫全流程(抓取+清洗+存储)

免费版的大模型调用次数有限制(每天100次),但企业版是无限的,还能私有化部署;大模型分析DOM结构有时候会慢1-2秒,但比起节省的时间,完全可以接受;自定义Skill的文档还不够完善,但社区很活跃,有问题在Discord里问,很快就能得到回复。但总的来说,OpenClaw真的改变了我写爬虫的方式——以前我是“代码的奴隶”,现在我是“需求的提出者”,把时间花在更有价值的业务逻辑上,而不是重复繁琐的DOM调试上。如果你也在被传统爬虫折磨,强烈建议你试试OpenClaw,相信我,用了就回不去了。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1314

SAP 批量修改 工艺路线 和 BOM

1、在运维的过程中经常会遇到用户需要批量更改组件,或者是批量更改数量,还是组件里面的一些标识,当处理这些批量数据处理的业务时,BOM的批量更改一个想到的就是CS20,但是CS20当BOM需要替换的时候就不是很适用。当前工作区域:选择 SAP_ITEM 对BOM行项目进行变更,工艺路线也是可以批量更改的,根据实际的业务进行选择,我这里选择的就是BOM的组件变更。5、本博客将使用新的一种方式进行BOM的批量变更,标准的事务代码:CEWB对BOM进行批量更改。3、使用LSMW的方式进行BOM的批量更改。

我小时候很黑的博客 4100

python滚动条翻页爬取数据_scrapy实践之翻页爬取的实现

安装在scrapy框架中,spider具有以下几个功能1. 定义初始爬取的url2. 定义爬取的行为,是否跟进链接3. 从网页中提取结构化数据所谓的跟进链接,其实就是自动爬取该页的所有链接,然后顺着对应的链接延伸开来不断爬取,这样只需要提供一个网站首页,理论上就可以实现网站全部页面的爬取,实现点到面的功能。如果自己来开发,不仅需要在算法层面,考虑是使用深度优先还是广度优先,还需要处理好提取的url...

weixin_39992072的博客 1207

基于STM32的蓝牙智能药盒设计

本研究设计了一种基于STM32F103C8T6单片机的蓝牙智能药盒系统,针对老年人用药管理需求,集成了定时提醒、药量检测、环境监测等功能。系统通过LCD1602显示屏实时显示时间与用药信息,支持每日3次定时提醒及3种药物用量设置,采用DHT11温湿度传感器、HX711药量检测模块和红外传感器实现环境监控,并通过蓝牙模块实现远程用药提醒。测试结果表明,系统定时误差≤30秒,温湿度监测精度±2℃,药量检测误差<1g,各项功能运行稳定。该设计为解决老年人用药依从性问题提供了智能化解决方案,具有实用价值和应用前景。

3254968421的博客 544

从原理到实战,一份详实的 Scrapy 爬虫教程

之前分享了很多 requests 、selenium 的 Python 爬虫文章,本文将从原理到实战带领大家入门另一个强大的框架 Scrapy。如果对Scrapy感兴趣的话,不妨跟随本文动...

cainiao_python的博客 3万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

scrapy发送翻页请求

1.翻页请求的思路 对于要提取如下图中所有页面上的数据该怎么办? 回顾requests模块是如何实现翻页请求的: 找到下一页的URL地址 调用requests.get(url) scrapy实现翻页的思路: 找到下一页的url地址 构造url地址的请求,传递给引擎 2.scrapy实现翻页请求 2.1 实现方法 确定url地址 构造请求,scrapy.Request(url,callb...

菜鸡小白的成长记录 3308

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

爬虫-Scrapy框架(vscode)

引擎 (engine):Scrapy的核心,所有模块的衔接,数据流程梳理。调度器 (scheduler):本质上这东西可以看成是一个队列,里面存放着一堆我们即将要发送的请求,可以看成是一个URL的容器。它决定了下一步要去爬取哪一个URL,通常我们在这里可以对URL进行去重操作。下载器 (downloader):它的本质就是用来发动请求的一个模块,完全可以把它理解成实现 get_page_source() 功能的模块,只不过它返回的是一个response对象。

qq_57620101的博客 3171

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Scrapy入门-模拟网络发包翻页爬取数据

在前文 Scrapy入门-翻页爬取及抓取链接页内容 中,我们了解了如何利用Scrapy框架进行翻页数据的爬取。当时,我们是用XPATH去识别“下一页”这个关键元素,访问其href属性中注明的下一页的链接地址,如此循环,最终得到了每一页的数据。然而,这种方案存在一个限制,即网页的“下一页”这个元素的属性中,必须给出下一页的链接。 如下图的网页中,下一页的href属性就不是一个真实的链接地址,它表示点击下一页时,程序时通过执行一段JS代码来获取下一页的数据。本文就将通过一个实例手把手教大家如何翻页抓取这类网页

千金散尽还复来 709

【Python网络爬虫入门教程3】成为“Spider Man”的第三课:从requests到scrapy、爬取目标网站

我们已经一起初步探索了网络爬虫的精彩世界,我们从HTML背景知识的介绍开始,深入理解了requests和这两个强大的工具。然后,我们在第二篇中利用这些知识和工具,成功爬取了一个网站上所有宝可梦的图片,获得了丰富的数据。而第三篇则让我们迈入了更高级的领域,学习了如何使用Scrapy库来处理更大规模的爬虫任务。Scrapy让我们更高效、更自动化地抓取了目标网站的宝可梦图片,为我们的爬虫之旅增添了更多神奇的色彩,并为之后更复杂的任务打下坚实的基础。

定期分享我的发现和想法,感谢你的陪伴和支持 3576

Scrapy框架爬取数据

因为对爬虫有着很大的好奇心,所以又找了一些资料继续开始了学习之旅。 文章目录一、Scrapy框架简介二、爬取网络数据2.1爬取单个网页数据2.2爬取多个网页数据三、一些小方法四、小结 一、Scrapy框架简介 如果你有跑车,你还会步行吗?这是李刚老师书里的一句话。在这里Scrapy就是爬虫,而像Python内置的urllib和re模块则是步行,跑车和步行的确都可以到达目的地,但是我们大多数通常还是会选择跑车,毕竟速度快而且又方便。简单的来讲,Scrapy是一个专业的、高效的爬虫框架,当然像这样的框架也不在

dayuhaitang1的博客 3998

Python Scrapy多层爬取收集数据

最近用Scrapy做爬虫的时候碰到数据分布在多个页面,要发去多次请求才能收集到足够的信息,例如列表只有简单的几个信息,更多的信息在内页。查看官方文档没找到相关的案例或说明,这个有点坑。 最后自己查了写资料,研究后一下,终于整出来了。 yield scrapy.Request(item['url'], meta={'item': item}, callback=self.detail_parse

kocor的博客 1万+

使用 Scrapy + Selenium 爬取动态渲染的页面

那么如果我们想要在scrapy也获取动态加载出的数据,则必须使用selenium创建浏览器对象,然后通过该浏览器对象进行请求发送,获取动态加载的数据值. 本文分享scrapy的介绍和如何配合selenium实现动态网页的爬取。它允许用户模拟最终用户执行的常见活动;在撰写爬虫程序时, 遇到动态渲染的页面我们可以使用Scrapy+Selenium对页面规避反爬策略和爬取页面信息. 虽然webdriver影响到了Scrapy 的运行速度, 我们还可以使用scrapy-redis让我们的爬虫变成分布式以提高效率。

NHB222222的博客 1844
上一篇: Scrapy教程 - (2)寫一個簡單爬蟲
下一篇: 【Learning Docker - 01】Using Amazon ECR with the AWS CL
彎彎廖
博客等级 码龄6年 0粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值