Scrapy 爬取旅游景点相关数据(五)

本期内容:(1)爬取日本其他城市数据存入数据库(2)爬取景点评论数据

1 爬取其他城市景点数据

只爬取一个城市的数据对于做数据可视化系统可能是不够的,因为数据样本量少嘛,本期来爬取其他城市的景点数据,前面四期已经打好的良好基础,本期内容非常简单,只需要对项目稍加修改,就可以完成,废话不多说,let’s go。

首先改一下爬虫,把城市作为一个参数,比如现在改为横滨:

start_urls = ['https://place.qyer.com/yokohama/sight/']
city = '横滨'
nation = '日本'

item部分这样写:

item['city'] = self.city
item['nation'] = self.nation

翻页的时候判断下100页以上的不用爬取了,因为这个网站超过100页你去点下一页,它也不刷新数据了

            if page_number > 100:break

多爬一些数据,后续做旅游分析系统的时候数据多一点系统做出来就好看,我爬取的结果:

在这里插入图片描述

2 爬取评论数据 爬取思路

之前爬取的数据字段里有个comment_url ,就是为了爬取评论数据作的准备,通过这个字段就可以爬取每个景点的用户评论,例如东京迪士尼景区的用户评论是在这个地址:https://place.qyer.com/poi/V2EJalFnBzRTbQ/review/

通过浏览器的开发者模式可以大致如何爬取这个页面,其他也类似于景区列表,这个页面也是通过翻页来加载数据的。

下面用一张图来展示爬取流程:

在这里插入图片描述

首先需要遍历tb_tour表的comment_url字段,循环中去读取每个景点的评论页面, 而爬取评论页面的过程中需要翻页,这里面也涉及一个循环,爬取每页都会去调用一次pipeline进行数据的存储。

这次我们会有两个地方去读取mysql数据库,一个是爬虫,二是管道部分,因此先优化一下数据库的配置,把链接信息写到settings.py里


DB_HOST = 'localhost'
DB_USER = '******'
DB_PASS = '******'
DB_DATABASE = 'scrapy_demo'
DB_CHARSET  = 'utf8'

3 编写评论爬虫 初始化部分

首先新建一个爬虫QyCommentSpider ,整个整体的思路和之前爬取景点的类似,不同之处在于启动的Url需要从数据库里去获取,另外,需要一个专门的管道了处理数据。先编写部分爬虫

class QyCommentSpider(scrapy.Spider):name = 'cmt'custom_settings = {'ITEM_PIPELINES': {'tutorial2.pipelines.TourCommentPipeline': 300}}def __init__(self, *args, **kwargs):super(QyCommentSpider, self).__init__(*args, **kwargs)options = webdriver.ChromeOptions()# 这行代码是用于设置 Chrome 浏览器的选项。--headless 参数表示以无头模式(无 GUI 界面)运行 Chrome 浏览器。# 无头模式下,浏览器运行在后台,不会显示任何图形界面,从而能够提高爬取效率和性能。这在服务器环境中非常有用,因为服务器通常没有图形界面。options.add_argument('--headless')LOGGER.setLevel(logging.WARNING)# 这行代码是用于指定 ChromeDriver 的路径。ChromeDriver 是 Selenium 用于控制 Chrome 浏览器的驱动程序。service = Service('/usr/local/bin/chromedriver')self.driver = webdriver.Chrome(options=options, service=service)  # 替换为 ChromeDriver 的实际路径def start_requests(self):# 连接 MySQL 数据库db = pymysql.connect(host=self.settings.get('DB_HOST'),user=self.settings.get('DB_USER'),password=self.settings.get('DB_PASS'),database=self.settings.get('DB_DATABASE'),charset=self.settings.get('DB_CHARSET'))cursor = db.cursor()cursor.execute("SELECT comment_url, id FROM tb_tour")start_urls = cursor.fetchall()cursor.close()db.close()for url in start_urls:yield scrapy.Request(url=url[0], callback=self.parse,meta={'tid': url[1]})

4 编写item 和 管道

class TourCommentItem(scrapy.Item):tid = scrapy.Field()username = scrapy.Field()avatar = scrapy.Field()comments = scrapy.Field()# 保存mysql 景点评论
class TourCommentPipeline:def process_item(self, item, spider):pass

在settings里也增加下新的管道

ITEM_PIPELINES = {'tutorial2.pipelines.TourPipeline': 300,'tutorial2.pipelines.TourCommentPipeline': 301,
}

5 开启debug

之前我们一直是用命令行来跑scrapy 的,可以在scrapy.cfg同级目录建一个run.py文件

# -*- coding:utf-8 -*-
from scrapy import cmdline
# cmt 对应的是爬虫名
# 在cmd运行 scrapy crawl cmt 同步
cmdline.execute("scrapy crawl cmt".split())

pycharm去执行这个文件,就可以debug运行了。

爬取结果:
在这里插入图片描述

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

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

相关文章

1.Redis介绍

redis是一个键值型数据库。 是一种nosql数据库,非关系型数据库。 sql数据库 1.字段类型是固定的。 2.表的结构是固定的。表数据量特别大的时候,去修改表结构会出现问题。也会导致业务逻辑的修改。 3.每个字段有一定的约束,比如唯一约束&…

【LeetCode】二叉树的锯齿形层序遍历

目录 一、题目二、解法完整代码 一、题目 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1: 输…

[Python] (中上难度) 五道高质量例题+详解 算法 奇数个数 求值 猴子分桃 淘汰游戏

1.奇数个数 题目&#xff1a; 计算0—7所能组成的 解析&#xff1a; 代码一&#xff1a; 假设范围为1-8位数的数字&#xff0c;假设sums4是因为个位时只有1&#xff0c;3&#xff0c;5&#xff0c;7四个奇数&#xff0c;循环从两位数开始遍历&#xff1a; 当 j < 2 时…

tof系统标定流程之lens标定

1、lens标定详解 为什么在标定tof时需要进行lens的标定,可以说lens标定是一个必不可少的步骤,tof模组也是有镜头的,镜头的畸变会导致进入的光线出现偏差,最终照射到tof芯片表面导致深度图的分布出现畸变,通常是枕形畸变。例外一个用途在于,在计算fppn误差环节需要知道镜头…

选股回测思路

数据处理 对日线数据进行数据清理 原来的日线数据包括交易日期、股票代码、股票名称、开盘价、收盘价、最高价、最低价首先计算涨跌幅&#xff0c;涨跌幅 &#xff08;收盘价 - 前一天收盘价&#xff09; / 收盘价然后计算当日涨跌幅&#xff0c;当日涨跌幅 &#xff08;收盘…

导游职业资格考试真题题库

导游职业资格考试真题题库 31.我国目前试点运行的10个TIR口岸中&#xff0c;有6个位于&#xff08;&#xff09;。 A.甘肃 B.新疆 C.宁夏 D.黑龙江 答案&#xff1a;B 解析&#xff1a;我国目前试点运行的10个TIR口岸中&#xff0c;有6个位于新疆。 32.下列新疆节日中&…

LangGPT结构化提示词编写实践

当然&#xff0c;我们可以从几个方面来讲解如何编写LangGPT的结构化提示词&#xff1a; 1. **明确目标**&#xff1a; - **目的**&#xff1a;确定提示词的最终目标&#xff0c;比如生成文本、回答问题、撰写报告等。 - **任务描述**&#xff1a;清晰描述任务&#xf…

随机森林(Random Forest)预测模型及其特征分析(Python和MATLAB实现)

## 一、背景 在大数据和机器学习的快速发展时代&#xff0c;数据的处理和分析变得尤为重要。随着多个领域积累了海量数据&#xff0c;传统的统计分析方法常常无法满足复杂问题的需求。在这种背景下&#xff0c;机器学习方法开始广泛应用。随机森林&#xff08;Random Forest&am…

在 Kali Linux 虚拟机中实现主机代理共享的详细指南

Kali Linux 是网络安全和渗透测试领域中广泛使用的操作系统。它提供了丰富的工具和灵活的环境&#xff0c;适合各种网络安全任务。在某些情况下&#xff0c;您可能需要通过主机的代理服务器来实现特定的网络配置&#xff0c;以便更好地保护隐私或进行网络测试。这篇文章将详细介…

langchain 入门指南 - 实现一个多模态 chatbot

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 在前面的文章中&#xff0c;我们学会了如何通过 langchain 实现本地文档库的 QA&#xff0c;又或者通过 langchain 来实现对话式的问答系…

解决Centos不支持docker命令行tab提示问题!!!

一、CentOS不支持Docker Tab提示 在使用CentOS操作系统时&#xff0c;有些用户可能会遇到不能自动补全Docker命令的问题。这是因为CentOS默认不支持Docker Tab提示功能&#xff0c;需要手动配置才能实现。在这篇科普文章中&#xff0c;我们将介绍如何解决这个问题&#xff0c;…

typescrip 定义函数

// 参数默认值和可选值 function fn1(name: string, age?: number): string {// 那么name必传&#xff0c;age选传&#xff0c;返回为字符串return ${name}${age}; }; fn1("全易"); fn1("全易", 18); // fn1("全易", 18, "在北京") …

GCA检查设计约束流程

文章目录 一、什么是GCA二、GCA流程1 .启动GCA2 .设置lib3 .读design并链接design4 .读SDC5 .analyze_design6 .报告或图形化界面分析结果 一、什么是GCA Galaxy Constraint Analyzer&#xff0c;简称GCA&#xff0c;是一个专门检查设计约束的工具&#xff0c;现在已经集成在P…

MySQL使用教程 最最最实用的零基础教程 直接从安装开始教!!!!

数据构成了我们日益数字化的社会基础。想象一下&#xff0c;从移动应用和银行系统到搜索引擎&#xff0c;再到如 ChatGPT 这样的先进人工智能聊天机器人&#xff0c;这些工具若没有数据支撑&#xff0c;将寸步难行。你有没有好奇过这些海量数据都存放在哪里呢&#xff1f;答案正…

Vue3学习总结

学习Vue3&#xff0c;最好的地方是官网&#xff1a;https://cn.vuejs.org/guide/quick-start.html 我这里只是自己的总结&#xff0c;以加深自己的学习记忆。如果其他人想学习Vue3&#xff0c;建议直接去官网学习。 1、已创建好的Vue3工程再次启动的命令&#xff1a;npm run de…

使用java自带的队列进行存取数据ArrayBlockingQueue 多线程读取ExecutorService

场景&#xff1a; 防止接收数据时处理不过来导致阻塞&#xff0c;使用ArrayBlockingQueue队列存储数据后&#xff0c;以多线程的方式处理数据 保证系统性能。 package com.yl.demo.main4;import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurr…

ArchLinux部署waydroid

在Arch Linux系统上部署Waydroid运行Android APP 文章目录 在Arch Linux系统上部署Waydroid运行Android APP1. 安装要求2. 本机环境3. 安装 Waydroid4. 网络配置5.注册Google设备6. 运行效果图 Waydroid是Anbox配合Haliun技术开发的LXC Android容器&#xff0c;可在GUN/Linux系…

华三云课堂CAS5.0忘记admin密码?

当忘记修改后的管理平台 admin 账户密码&#xff0c;无法登录管理平台。 处理步骤&#xff1a; (1) SSH 连接服务器。 (2) 执行/var/lib/h3class/bin/reset-admin-pwd.sh 命令。 (3) 重置后的密码为 Cloud1234

src漏洞挖掘--验证码篇

图片验证码 验证码前端检测 验证码由客户端JS生成并且仅仅在客户端用JS验证&#xff0c;通过抓包看数据传输是否有验证码字段或者是关闭JS看能否通过验证。 测试方法&#xff1a;当我们开始抓包&#xff0c;输入任意验证码&#xff0c;页面提示验证码错误&#xff0c;且没有抓…

《AM-Bi-LSTM: Adaptive Multi-Modal Bi-LSTM for Sequential Recommendation》

系列论文研读目录 文章目录 系列论文研读目录1.2.3.4.5.6.7.8.9.10. 文章链接 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.