Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Scrapy 持续自动翻页爬取数据

Scrapy 持续自动翻页爬取数据

原创
作者头像
待你如初见
修改于 2021-04-27 07:09:16
修改于 2021-04-27 07:09:16
5.4K0
举报
文章被收录于专栏:待你如初见待你如初见

概述

  • 方案一:
  • 根据URL寻找规律适用于没有下一页button的网页,或者button不是url的网页
  • 方案二:
    • 根据下一页button获取button内容

修改代码

  • 这里使用方案二
  • 通过F12 得到下一页buton的Xpath
图片.png
图片.png
代码语言:txt
AI代码解释
复制
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
from urllib.parse import urljoin

class BookSpider(scrapy.Spider):
    name = 'book'
    allowed_domains = ['dangdang.com']
    start_urls = ['http://category.dangdang.com/cp01.54.92.01.00.00.html']
    page_url = None

    def parse(self, response):
        # 获取到所有有效li 获取最后一页时发现xpath发生改变 使用模糊匹配
        for each in response.xpath('//ul[contains(@id, "component_5")]/li'):
            # 标题
            title = each.xpath("p[1]/a/text()").extract()
            # 价格
            price = each.xpath("p[3]/span[1]/text()").extract()
            # 评论数
            star = each.xpath("p[4]/a/text()").extract()
            # 详情介绍
            detail = each.xpath("p[2]/text()").extract()
            if not detail:
                detail = ["本书暂无描述、、、、、、"]
            print('detail', detail)
            print("title", title)
            print('price', price)
            print('star', star)
        # 获取下一页url
        self.page_url = response.xpath(
            '//div[@class="paging"]//ul//li[10]//a/@href').extract()
        # 当快结束时下一页xpath发生改变
        if not self.page_url:
            self.page_url = response.xpath(
                '//div[@class="paging"]//ul//li[8]//a/@href').extract()
        # page_url 是一个数组
        for next_url in self.page_url:
            yield Request(urljoin("http://category.dangdang.com", next_url), callback=self.parse)
  • 翻页爬取结束

补充

  • setting.py 解释
代码语言:txt
AI代码解释
复制
# -\*- coding: utf-8 -\*-

# Scrapy settings for BookSpider project

# 

# For simplicity, this file contains only settings considered important or

# commonly used. You can find more settings consulting the documentation:

# 

# [https://doc.scrapy.org/en/latest/topics/settings.html](https://doc.scrapy.org/en/latest/topics/settings.html)

# [https://doc.scrapy.org/en/latest/topics/downloader-middleware.html](https://doc.scrapy.org/en/latest/topics/downloader-middleware.html)

# [https://doc.scrapy.org/en/latest/topics/spider-middleware.html](https://doc.scrapy.org/en/latest/topics/spider-middleware.html)

# 爬虫名字

BOT\_NAME = 'BookSpider'

# 爬虫模块路径

SPIDER\_MODULES = 'BookSpider.spiders'

NEWSPIDER\_MODULE = 'BookSpider.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent

# 客户端user-agent 请求头

#USER\_AGENT = 'BookSpider (+[http://www.yourdomain.com](http://www.yourdomain.com))'

# Obey robots.txt rules

# 禁止爬虫配置 robots.txt 是遵循 Robot协议 的一个文件,它保存在网站的服务器中,它的作用是,告诉搜索引擎爬虫,

# 本网站哪些目录下的网页 不希望 你进行爬取收录。在Scrapy启动后,会在第一时间访问网站的 robots.txt 文件,然后决定该网站的爬取范围

# 在某些情况下我们想要获取的内容恰恰是被 robots.txt 所禁止访问的。所以,某些时候,我们就要将此配置项设置为 False ,拒绝遵守 Robot协议

ROBOTSTXT\_OBEY = False

# Configure maximum concurrent requests performed by Scrapy (default: 16)

# 并发请求数

# 当有CONCURRENT\_REQUESTS,没有DOWNLOAD\_DELAY 时,服务器会在同一时间收到大量的请求

# 当有CONCURRENT\_REQUESTS,有DOWNLOAD\_DELAY 时,服务器不会在同一时间收到大量的请求

#CONCURRENT\_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)

# See [https://doc.scrapy.org/en/latest/topics/settings.html#download-delay](https://doc.scrapy.org/en/latest/topics/settings.html#download-delay)

# See also autothrottle settings and docs

# 延迟下载秒数

#DOWNLOAD\_DELAY = 3

# The download delay setting will honor only one of:

# 单域名访问并发数,并且延迟下次秒数也应用在每个域名

#CONCURRENT\_REQUESTS\_PER\_DOMAIN = 16

# 单IP访问并发数,如果有值则忽略:CONCURRENT\_REQUESTS\_PER\_DOMAIN,并且延迟下次秒数也应用在每个IP

#CONCURRENT\_REQUESTS\_PER\_IP = 16

# Disable cookies (enabled by default)

# 是否支持cookie,cookiejar进行操作cookie

#COOKIES\_ENABLED = False

# Disable Telnet Console (enabled by default)

# Telnet用于查看当前爬虫的信息,操作爬虫等...

# 使用telnet ip port ,然后通过命令操作

# TELNETCONSOLE\_ENABLED = True

# TELNETCONSOLE\_HOST = '127.0.0.1'

# TELNETCONSOLE\_PORT = 6023,

# Override the default request headers:

# 默认请求头

#DEFAULT\_REQUEST\_HEADERS = {

# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,\*/\*;q=0.8',

# 'Accept-Language': 'en',

#}

# Enable or disable spider middlewares

# See [https://doc.scrapy.org/en/latest/topics/spider-middleware.html](https://doc.scrapy.org/en/latest/topics/spider-middleware.html)

#SPIDER\_MIDDLEWARES = {

# 'BookSpider.middlewares.BookspiderSpiderMiddleware': 543,

#}

# Enable or disable downloader middlewares

# See [https://doc.scrapy.org/en/latest/topics/downloader-middleware.html](https://doc.scrapy.org/en/latest/topics/downloader-middleware.html)

#DOWNLOADER\_MIDDLEWARES = {

# 'BookSpider.middlewares.BookspiderDownloaderMiddleware': 543,

#}

# Enable or disable extensions

# See [https://doc.scrapy.org/en/latest/topics/extensions.html](https://doc.scrapy.org/en/latest/topics/extensions.html)

#EXTENSIONS = {

# 'scrapy.extensions.telnet.TelnetConsole': None,

#}

# Configure item pipelines

# See [https://doc.scrapy.org/en/latest/topics/item-pipeline.html](https://doc.scrapy.org/en/latest/topics/item-pipeline.html)

# 定义pipeline处理请求

#ITEM\_PIPELINES = {

# 'BookSpider.pipelines.BookspiderPipeline': 300,

#}

# Enable and configure the AutoThrottle extension (disabled by default)

# See [https://doc.scrapy.org/en/latest/topics/autothrottle.html](https://doc.scrapy.org/en/latest/topics/autothrottle.html)

#AUTOTHROTTLE\_ENABLED = True

# The initial download delay

#AUTOTHROTTLE\_START\_DELAY = 5

# The maximum download delay to be set in case of high latencies

#AUTOTHROTTLE\_MAX\_DELAY = 60

# The average number of requests Scrapy should be sending in parallel to

# each remote server

#AUTOTHROTTLE\_TARGET\_CONCURRENCY = 1.0

# Enable showing throttling stats for every response received:

#AUTOTHROTTLE\_DEBUG = False

# Enable and configure HTTP caching (disabled by default)

# See [https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings](https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings)

#HTTPCACHE\_ENABLED = True

#HTTPCACHE\_EXPIRATION\_SECS = 0

#HTTPCACHE\_DIR = 'httpcache'

#HTTPCACHE\_IGNORE\_HTTP\_CODES = []

#HTTPCACHE\_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
全球43亿个IPv4地址正式耗尽,IPv6时代即将到来,中国取得了哪些骄傲的成就?
IPv4,是互联网协议的第四版(Internet Protocol Version 4 ),IPv4地址就是我们日常说的ip地址,比如常见的192.168.1.1或116.255.128.1,是一种4个用小数点分开的十进制数,通过ip地址,让我们的电脑、手机等设备在互联网上通信。
网络技术联盟站
2019/11/29
1.4K0
今天,全球 43 亿个 IPv4 地址正式耗尽,将向 IPv6 过度!
该过程自80年代以来就已预见到,顶级地址实际上已经在2012年耗尽。那时,所有IPv4地址空间已分配给五大区域互联网注册机构,非洲网络信息中心 (AFRINIC)针对非洲,北美网络信息中心(ARIN)针对南极洲、加拿大、部分加勒比海地区和美国,亚太互联网络信息中心(APNIC)针对东亚、大洋洲、南亚和东南亚,拉丁美洲网络信息中心(LACNIC)针对加勒比海的大部分地区和整个拉丁美洲,以及欧洲网络信息中心(RIPE NCC)针对欧洲、中亚、俄罗斯和西亚。
杰哥的IT之旅
2020/06/18
7600
今天,全球 43 亿个 IPv4 地址正式耗尽,将向 IPv6 过度!
全球 43 亿个 IPv4 地址已正式耗尽,未来我们该怎么办呢?
该消息是在一封电子邮件(由 Nikolas Pediaditis 发布)中宣布的,内容为:
iMike
2019/11/29
9740
中国电信“运营级IPv6技术创新与超大规模部署”获选世界互联网领先科技成果
10月20日,第六届世界互联网大会“领先科技成果发布活动”在乌镇开幕。中国电信“运营级IPv6技术创新与超大规模部署”研发成果获评“世界互联网领先科技成果”。
灯塔大数据
2019/10/23
4510
中国加快基于 IPv6 的互联网发展,2025 年实现全覆盖
中共中央办公厅、国务院办公厅印发了《推进互联网协议第六版(IPv6)规模部署行动计划》,计划全面推进部署 IPv6,协同推进网络实名制。
Debian中国
2018/12/20
1.3K0
IPv6与IPv4的区别 网信办等三部推进IPv6规模部署
摘要:今年4月份中央网信办、国家发展改革委、工业和信息化部联合印发《深入推进IPv6规模部署和应用2022年工作安排》,加快IPV6规模部署。到底什么是IPv6?IPv6与IPv4的区别是什么?
埃文科技
2022/07/05
5190
IPv6与IPv4的区别 网信办等三部推进IPv6规模部署
全网IPV6还要多久?—— 国务院:不远了。
众所周知,随着互联网计算机的增多,IPV4网络地址资源必定不够用。为了互联网更好的发展,这才有了IPV4的升级版IPV6。
神无月
2018/05/11
3.1K4
全网IPV6还要多久?—— 国务院:不远了。
什么东西比地球上的沙子还要多?
很多人都听过科学家说宇宙中的星球比地球上的沙子还多,宇宙中有多少星球呢?根据美国国家科学院数据可知,目前宇宙中恒星数量为3*10^22,恒星只是众多星球类别中的一种。
边缘计算
2019/11/29
8910
输不起的网络战 中国应加快部署IPv6丨科技云·视角
近期中美贸易战、中兴事件不断刺激国人神经,引发各界人士围绕“核心技术”话题展开了反思,大量的“核心技术”被美国把控,就如同被人掐住了命,而在最为活跃的互联网,是否将再次受制于人?
科技云报道
2022/04/14
7070
输不起的网络战 中国应加快部署IPv6丨科技云·视角
IPv6终于要取代IPv4了!!!你准备好了么?
周末干什么?天气这么冷,被窝这么暖!当然钻被窝看《Java后端技术》公众号文章啦!最近,国家对IPv6发力了,小编一大早爬起来为大家整理了一篇文章,还请各位客官笑纳。
Java后端技术
2018/08/09
1.2K0
IPv6终于要取代IPv4了!!!你准备好了么?
IPv4已正式用尽
(英语:Internet Protocol version 4,缩写:IPv4,又称互联网通信协议第四版)是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署和使用的版本。其后继版本为IPv6,直到2011年,IANAIPv4位址完全用尽时,IPv6仍处在部署的初期。
小陈运维
2021/10/13
5320
IPv6规模部署提上日程,与网络安全从业者息息相关
基于互联网协议IPv4的全球互联网面临网络地址消耗殆尽、服务质量难以保证等制约性问题,IPv6能够提供充足的网络地址和广阔的创新空间,是全球公认的下一代互联网商业应用解决方案。大力发展基于IPv6的下一代互联网,有助于显著提升我国互联网的承载能力和服务水平,更好融入国际互联网,共享全球发展成果,有力支撑经济社会发展,赢得未来发展主动。2017年11月26日,中共中央办公厅、国务院办公厅印发了《推进互联网协议第六版(IPv6)规模部署行动计划》。 根据权威机构 Gartner 预计,到 2020 年将有超过
安恒信息
2018/04/10
1.1K0
IPv6规模部署提上日程,与网络安全从业者息息相关
IPv6根服务器4台落户中国!《雪人计划》详解
当下的国际秩序对中国极为不公且极为不利,因为规则本就是以美国为首的西方国家所制定。最近美国高调宣布不承认中国的市场经济地位。
肉眼品世界
2023/02/12
6.7K0
IPv6根服务器4台落户中国!《雪人计划》详解
IPv6,到底是什么?
通知的具体内容我就不贴出来了,主要意思就是:国家要大力推动IPv6的规模化部署,因此,我们提出了一些具体举措,敦促手机终端、承载网络、数据中心等全面支持IPv6,我们要在这方面领先全世界。。。
鲜枣课堂
2019/07/19
1.8K0
极客资讯丨官方称:2018年将加速推进IPv6部署进度!
面对已不堪重负的IPv4,国家层面终于决定下狠手加速部署IPv6。 11月26日,中共中央办公厅、国务院办公厅联合引发了《推进互联网协议第六版(IPv6)规模部署行动计划》(下面简称《计划》)。 《计划》中指出基于互联网协议第四版(IPv4)的全球互联网面临网络地址消耗殆尽、服务质量难以保证等制约性问题,IPv6能够提供充足的网络地址和广阔的创新空间,是全球公认的下一代互联网商业应用解决方案。 《计划》目标如下: 1、到2018年末,市场驱动的良性发展环境基本形成,IPv6活跃用户数达到2亿,在互联网用户
一川水巷
2018/05/18
1K0
全球互联网发展进入“拐点”——展望下一代互联网
“未来5年,全球75%的网民可能成为IPv6用户,”亚太互联网络信息中心总裁保罗·威尔逊日前在北京参加会议时做出这样的预测,表明了互联网发展的新态势。 从万物互联到多国参与建设根服务器,以IPv6协议为基础的下一代互联网,正快速改变现有互联网的面貌与格局,可以说这一年,全球已经进入了互联网发展的“拐点”,这对世界各国来说都是重要发展机遇。 向IPv6一路“狂奔” TCP/IP协议是互联网发展的基石,其中IP是网络层协议,规范互联网中分组信息的交换和选路。目前采用的IPv4协议地址长度为32位,总数约43
企鹅号小编
2018/01/25
7500
IPv6到IPv6+,从万物互联到万物智联
中国已经开始逐步进入万物互联的社会。在2G时代我们通过电脑和世界相联,在3G和4G时代智能手机成为联接的重要媒介,那么在5G和云的时代,万物互联已经深入了我们的生活、工作中。
SDNLAB
2020/10/27
1.2K0
IPv6到IPv6+,从万物互联到万物智联
推荐阅读
相关推荐
全球43亿个IPv4地址正式耗尽,IPv6时代即将到来,中国取得了哪些骄傲的成就?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档