scrapy 爬取旅游景点相关数据(一)

news2024/9/23 13:27:29

第一节 Scrapy 练习爬取穷游旅游景点

配套视频可以前往B站:https://www.bilibili.com/video/BV1Vx4y147wQ/?vd_source=4c338cd1b04806ba681778966b6fbd65

本项目为scrapy 练手项目,爬取的是穷游旅游景点列表数据

0 系统的环境

现在网上可以找到很多scrapy版本的视频或者代码,为避免混淆,下面列出本文开发过程中使用的软件版本。 scrapy 和 selenium 新版本和老版都改了不少东西,所以在查问题的时候务必看下版本,很多老的文章中的源码都已经无法正常运行了。

python 3.9

# python 依赖
scrapy==2.11.2
selenium==4.23.1

1 创建项目

scrapy startproject tutorial2

scrapy genspider <爬虫名字> <允许的域名>
# 实际命令
scrapy genspider qiongyou qyer.com

2 编写爬虫

class QiongyouSpider(scrapy.Spider):
    name = 'qiongyou'
    allowed_domains = ['qyer.com']
    start_urls = ['https://place.qyer.com/tokyo/sight/']

    def parse(self, response):
        # 定义对网站的操作 (保存HTML)
        with open('japan.html', 'wb') as f:
            f.write(response.body)

3 执行爬虫

scrapy crawl qiongyou

直接执行是报错503的,要启用下载中间件模块,增加user-agent就可以爬取了。

4 修改settings.py配置,激活下载中间件,我这边在中间件middlewares.py 中增加了一个随机的user-agent头。

DOWNLOADER_MIDDLEWARES = {
    'tutorial2.middlewares.Tutorial2DownloaderMiddleware': 543,
}
    def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.

        # Must either:
        # - return None: continue processing this request
        # - or return a Response object
        # - or return a Request object
        # - or raise IgnoreRequest: process_exception() methods of
        #   installed downloader middleware will be called
        user_agent_list = [
            'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
            'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
            'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
            'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
            'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
            'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
            'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
            'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)',
            'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
            'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
            'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
            'Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
            'Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
            'MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
            'Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10',
            'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13',
            'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+',
            'Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0',
            'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124',
            'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)',
            'UCWEB7.0.2.37/28/999',
            'NOKIA5700/ UCWEB7.0.2.37/28/999',
            'Openwave/ UCWEB7.0.2.37/28/999',
            'Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999',
            'UCWEB7.0.2.37/28/999',
            'NOKIA5700/ UCWEB7.0.2.37/28/999',
            'Openwave/ UCWEB7.0.2.37/28/999',
            'Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999'
        ]

        request.headers['User-Agent'] = random.choice(user_agent_list)

        return None

执行第3步的命令 根据下载下来的japan.html可以看到,确实可以看到景点数据。
在这里插入图片描述

5 问题

然后查看翻页机制,发现这个页面的翻页是通过js加载数据动态实现的,因此需要研究其他手段例如结合scrapy + selenium才能有效爬取后续页面的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java基础概念05-运算符

一、自增自减运算符 二、赋值运算符 2-1、注意 三、关系运算符 四、逻辑运算符 4-1、短路逻辑运算符 五、三元运算符 六、运算符的优先级

PostgreSQL 中如何重置序列值:将自增 ID 设定为特定值开始

我是从excel中将数据导入&#xff0c;然后再通过sql插入数据&#xff0c;就报错。 需要设置自增ID开始值 1、确定序列名称&#xff1a; 首先&#xff0c;需要找到与的增字段相关的序列名称。假设表名是 my_table 和自增字段是 id&#xff0c;可以使用以下查询来获取序列名称…

嵌入式C++、Raspberry Pi、LoRa和Wi-Fi技术、TensorFlow、ROS/ROS2:农业巡检数据导航机器人设计流程(代码示例)

随着科技的不断进步&#xff0c;农业领域也在逐渐向智能化发展。农业巡检机器人作为农业智能化的重要组成部分&#xff0c;能够自动化地监测农作物生长状况&#xff0c;提高农业管理的效率和精确度。本文将介绍一个基于Raspberry Pi和NVIDIA Jetson的农业巡检机器人&#xff0c…

华天动力OA downloadWpsFile接口处任意文件读取漏洞复现 [附POC]

文章目录 华天动力OA downloadWpsFile接口处任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现华天动力OA downloadWpsFile接口处任意文件读取漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内…

学习日记:输入输出

目录 1.概念 2. C语言函数库提供的输入输出函数 2.1 getchar 2.2 putchar 2.3 printf 附&#xff1a;占位符 2.4 scanf 3. 附加 1.概念 输入是从键盘、鼠标等设备向计算机&#xff08;内存&#xff09; 注&#xff1a;c语言本身不提供输入输出功能&#xff0c;使用的…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十章 Linux用户层和内核层

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【React】组件:全面解析现代前端开发的基石

文章目录 一、什么是组件&#xff1f;二、组件的类型三、组件的生命周期四、状态管理五、属性传递六、组合与继承七、最佳实践 在现代前端开发中&#xff0c;React 已成为开发者构建用户界面的首选框架之一。React 的强大之处在于其组件化设计&#xff0c;允许开发者将 UI 拆分…

电量采集模块—应用于工厂车间配电室电网监测系统的搭建

前言 随着社会经济发展&#xff0c;工厂配电电网系统的供电实时监测越来越重要&#xff0c;这不仅是影响工厂安全性&#xff0c;更是工厂自动化的必然环节。工厂电力监测具有长时间在线工作的可靠性、较强的现场操作和与中心站的通讯功能&#xff0c;同时具有长时间记录存储数据…

04 标识符与关键字

1 标识符 标识符用于命名程序中标识像变量和函数这样的元素。 number1 eval(input("number: ")) number2 eval(input("number: ")) number3 eval(input("number: ")) average (number1 number2 number3) / 3 print("average: "…

【MySQL进阶之路 | 高级篇】行锁之临键锁和插入意向锁

1. 临键锁&#xff08;Next-Key Locks&#xff09; 有时候我们既想锁住某条记录&#xff0c;又想阻止其他事务在该记录前边的间隙插入新记录&#xff0c;所以InnoDB就提出了一种称之为Next-Key Locks的锁&#xff0c;官方的类型名称为:LOCK_ORDINARY&#xff0c;我们也可以简称…

Ubuntu20.04 设置静态ip

Ubuntu 从 17.10 开始&#xff0c;已放弃在 /etc/network/interfaces 里固定 IP 的配置&#xff0c;interfaces 文件不复存在&#xff0c;即使配置也不会生效&#xff0c;而是改成 netplan 方式 &#xff0c;配置写在 /etc/netplan/01-netcfg.yaml &#xff0c;50-cloud-init.y…

手把手教你使用 Python 制作超级玛丽游戏

编写一个完整的《超级玛丽兄弟》&#xff08;Super Mario Bros.&#xff09;风格的游戏需要涉及到多个方面&#xff0c;包括游戏循环、玩家控制、敌人AI、碰撞检测、关卡设计、得分系统等等。由于这是一个复杂的项目&#xff0c;我将为你提供一个更加详细的框架&#xff0c;并解…

Xstate inspect状态图的使用 和 原理

状态图的好处之一是&#xff0c;在将状态图组合在一起的过程中&#xff0c;您可以探索流程中所有可能的状态。这种探索将帮助您避免代码中的错误和错误&#xff0c;因为您更有可能涵盖所有可能发生的情况。 因为状态图是可执行的&#xff0c;所以它们既可以表现为图&#xff0…

【YashanDB知识库】update/delete未选中行时,v$transaction视图没有事务,alter超时问题

问题现象 1、alter table修改表字段名&#xff0c;卡住&#xff0c;超时。 2、查看v$transaction事务视图&#xff0c;没有看到事务记录。 3、问题单&#xff1a;调整表结构时超时 问题风险及影响 无风险 问题影响版本 客户版本&#xff1a;22.2.8.3 问题发生原因 del…

2.1.卷积层

卷积 ​ 用MLP处理图片的问题&#xff1a;假设一张图片有12M像素&#xff0c;那么RGB图片就有36M元素&#xff0c;使用大小为100的单隐藏层&#xff0c;模型有3.6B元素&#xff0c;这个数量非常大。 识别模式的两个原则&#xff1a; 平移不变性&#xff08;translation inva…

MySQL学习(15):SQL优化:load、order by、group by

1.大批量插入数据指令load 当需要大批量插入数据时&#xff0c;insert的效率比较低&#xff0c;此时可以使用load命令 使用方法如下&#xff1a; &#xff08;1&#xff09;客户端连接服务端时&#xff0c;加上参数--local-infile mysql --local-infile -u root -p&#xf…

Java实现短信验证码服务

1.首先这里使用的是阿里云的短信服务。 package com.wzy.util;; import cn.hutool.captcha.generator.RandomGenerator; import com.aliyun.dysmsapi20170525.Client; import com.wzy.entity.Ali; import org.springframework.stereotype.Component;/*** Author: 顾安* Descri…

2024年铜川宜君半程马拉松,暴晒+爬坡152安全完赛

1、赛事背景 2024年7月21日&#xff0c;我参加了2024年铜川宜君半程马拉松赛&#xff0c;7月举办的赛事很少&#xff0c;全国都算温度比较高的&#xff0c;虽然宜君是一个山城&#xff0c;还是会担心气温会高。 临开赛1、2周&#xff0c;陕西区域降水比较多&#xff0c;赛前一…

C++从入门到起飞之——初始化列表类型转换static成员 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、初始化列表 2、 类型转换 3. static成员 4、完结散花 1、初始化列表 • 之前我们实现构造函数…

在Linux中,部署及优化Tomcat

tomcat概述 自 2017 年 11月编程语言排行榜 Java 占比 13%,高居榜首&#xff0c;Tomcat 也一度成为 Java开发人员的首选。其开源、占用系统资源少、跨平台等特性深受广大程序员喜爱。本章主要学习如何部署 Tomcat 服务&#xff0c;根据生产环境实现多个虚拟主机的配置&#xf…