python爬取穷游网景点评论

爬取穷游网的景点评论数据,使用selenium爬取edge浏览器的网页文本数据。

同程的评论数据还是比较好爬取,不像大众点评需要你登录验证杂七杂八的,只需要找准你想要爬取的网页链接就能拿到想要的文本数据。

这里就不得不提一下爬取过程中遇到的问题,就是关于无头模式和有头模式,首先介绍一下什么是无头模式和有头模式:

无头模式和有头模式是指网络爬虫在执行过程中是否显示浏览器的界面。

有头模式是指网络爬虫在执行过程中会显示浏览器的界面,可以看到爬取过程中的页面加载、点击等操作,可以进行人工干预和调试。有头模式一般用于开发和调试阶段,便于观察爬虫的执行情况。

无头模式是指网络爬虫在执行过程中不显示浏览器的界面,所有的操作都在后台进行,不会干扰用户的正常使用。无头模式一般用于实际的爬取任务,可以提高爬取效率,减少资源消耗。

总的来说,无头模式和有头模式的区别在于是否显示浏览器界面,有头模式适用于开发和调试阶段,无头模式适用于实际的爬取任务。

无头模式的问题:

1、无头模式下缺少浏览器信息,或默认填充的浏览器信息带有爬虫痕迹,会被识别为机器人而导致爬虫执行失败。

2、页面动态加载时,有时会根据页面size来布局控件,如果size太小会出现控件加载失败情况。

所以经常爬到二十多页的时候就突然报错“找不到元素无法点击”这种的错误。又或者是爬到三十多页又告诉我找不到元素,某某列表为空,就很烦。😠 😡 😤

为了解决这个问题我的尝试:

1:延长页面的存在的时间,让服务器充分响应,并且模拟手下拉的操作,让下面没显示出来的界面加载出来:

def to_the_buttom():
    js = 'document.getElementsByClassName("search-body left_is_mini")[0].scrollTop=10000'
    driver.execute_script(js)
def to_the_top():
    js = "var q=document.documentElement.scrollTop=0"  # 滚动到最上面
    driver.execute_script(js)
def to_deal_question():
    driver.implicitly_wait(10)
    time.sleep(3)
    to_the_buttom()
    time.sleep(3)
def to_view():
    driver.implicitly_wait(10)
    to_the_buttom()
    time.sleep(3)
    button = driver.find_element(By.XPATH, '//*[@id="commentModule"]/div[6]/ul/li[7]/a')
    driver.execute_script("arguments[0].scrollIntoView();", button)

2:使用Selenium库中的webdriver来实例化一个Microsoft Edge浏览器的驱动程序,并设置了一些选项。

opt = Options()
opt.add_argument("--headless")
opt.add_argument("window-size=1920x1080")
opt.add_argument('--start-maximized')
driver = webdriver.Edge(options=opt)
url = 'https://you.ctrip.com/sight/daocheng342/11875.html'
driver.get(url)
# driver.maximize_window()

然后就可以愉快把评论全拿到手了,这里是穷游网木格措的评论。

最后我还用jieba库做了一下词条分析,想看看这个景点大家的关注点都是些什么。

全部代码:

爬取数据板块:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.keys import Keys
from requests import request
from selenium.webdriver.support import ui
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Edge()
url = 'https://place.qyer.com/poi/V2UJZ1FgBzZTYVI2/'
driver.implicitly_wait(10)
driver.get(url)
driver.maximize_window()
def to_the_buttom():
    js="var q=document.documentElement.scrollTop=100000"
    driver.execute_script(js)

with open("mu_ge_cuo_2.txt", "a", encoding='utf-8') as f:
    for x in range(1,6):
        driver.implicitly_wait(10)
        to_the_buttom()
        time.sleep(3)
        to_the_buttom()
        for i in range(1,11):
            text=driver.find_element(By.XPATH, "/html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/ul/li[{}]/div/p".format(i)).text
            f.write(text)
            f.write("\n")
        print(x)
        button = driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/div[1]/div/a[{}]'.format(x))
        button.click()
# with open("mu_ge_cuo_2.txt", "a", encoding='utf-8') as f:
#     for x in range(6,83):
#         driver.implicitly_wait(10)
#         to_the_buttom()
#         time.sleep(3)
#         to_the_buttom()
#         for i in range(1,11):
#             text=driver.find_element(By.XPATH, "/html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/ul/li[{}]/div/p".format(i)).text
#             f.write(text)
#             f.write("\n")
#         print(x)
#         button = driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/div[1]/div/a[6]')
#         button.click()

time.sleep(100000)
driver.close()

分析数据提取词条板块:

import jieba
stopwords = [line.strip() for line in open('hit_stopwords.txt',encoding='utf-8').readlines()]
stopwords.append("\n")
# print(stopwords)
f1=open('mu_ge_cuo_2.txt','r',encoding='utf-8')
code=[]
for i in f1.read().strip().split(' '):
    words = jieba.lcut(i)
    code+=words
d={}
for word in code:
    if word not in stopwords:
        d[word]=d.get(word,0)+1
ls=list(d.items())
ls.sort(key=lambda s:s[-1],reverse=True)
print(ls)
f1.close()
with open("mu_ge_cuo_2_results.txt", "a", encoding='utf-8') as f:
    for i in range(20):
        f.write(str(ls[i]))
        f.write("\n")

里面的stopwords是为了去除标点符号、特殊字符和语气助词,在主页的其他文章里有提供。

如果这篇文章能对您有所帮助的话,还望点个赞赞呀~😘

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg 6.1 发布,7.0时代即将来临

11月10日,FFmpeg 6.1正式发布。 FFmpeg 发布版本的时候,按照惯例,会选择一些物理学家名字作为代号,这一新版本代号为“Heaviside”。主要为纪念伟大的英国数学家和物理学家奥利弗黑维塞(Oliver Heaviside)。 奥利弗黑维…

100套Axure RP大数据可视化大屏模板及通用组件库

106套Axure RP大数据可视化大屏模板包括了多种实用美观的可视化组件库及行业模板库,行业模板涵盖:金融、教育、医疗、政府、交通、制造等多个行业提供设计参考。 随着大数据的发展,可视化大屏在各行各业得到越来越广泛的应用。可视化大屏不再…

Simulink 自动代码生成电机控制:模型预测控制(MPC)模块使用总结(1)

目录 前言 MPC模块使用步骤和参数设计 电机控制系统验证 MPC参数调整 MPC和PI控制器比较 总结 前言 前面尝试了基于电机DQ轴电流环的传递函数设计PI控制器的参数,最近尝试了下模型预测控制(MPC)对电流环进行控制,这里总结一下…

MySQL 运算符二

逻辑运算符 逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。 运算符号作用NOT 或 !逻辑非AND逻辑与OR逻辑或XOR逻辑异或 1、与 mysql> select 2 and 0; --------- | 2 and 0 | --------- | 0 | -…

pipeline agent分布式构建

开启 agent rootjenkins:~/learning-jenkins-cicd/07-jenkins-agents# docker-compose -f docker-compose-inbound-agent.yml up -d Jenkins配置添加 pipeline { agent { label docker-jnlp-agent }parameters {booleanParam(name:pushImage, defaultValue: true, descript…

【日常】爬虫技巧进阶:textarea的value修改与提交问题(以智谱清言为例)

序言 记录一个近期困扰了一些时间的问题。 我很喜欢在爬虫中遇到问题,因为这意味着在这个看似简单的事情里还是有很多值得去探索的新东西。其实本身爬虫也是随着前后端技术的不断更新在进步的。 文章目录 序言Preliminary1 问题缘起1.1 Selenium长文本输入阻塞1.2…

60V100V降压ic推荐

在电源降压领域,一款优秀的降压IC需要具备高效、稳定、安全、易于使用等特性。今天,我们为大家推荐一款具有9.2V至100V输入电压范围、4.5A连续输出电流、96%峰值效率、495μA工作静态电流、峰值电流模式控制、100V19mQ高边和低边MOS、固定150kHz开关频率…

C/C++ 字符 - ‘0‘ 或者 + ‘0‘ 的含义及区别(从ASCII码深度解析,小白一看就懂!!!)

目录 一、前言 二、什么是ACSII码? 三、深度理解字符 - ‘0‘ 或者 ‘0‘ 四、实战演练 五、共勉 一、前言 想必大家在刷题或者是看别人写的代码中,经常会遇到 s[i]-’0‘ 或者 s[i]’0‘ 这个情况,初次遇到这种代码,肯定是…

4.1指令系统-指令格式

现代计算机的结构 计算机的工作过程 指令的定义 指令(又称机器指令): 是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。 一台计算机的所有指令的集合构成改机指令系统,也称为指令集。 注意&#xff1…

拼多多百亿补贴商品详情API接口系列

拼多多API接口是拼多多网提供的一种应用程序接口,允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口,开发者可以开发各种应用程序,如店铺管理工具、数据分析工具、购物比价工具等。在本章中,我们将介绍拼多多API接…

Jquery 通过class名称属性,匹配元素

UI自动化过程中,常常需要判断某个元素是否满足条件,再走不通的脚本逻辑;、本文介绍如何通过jquery判断菜单是否展开,来决定是否执行菜单展开脚本;Jquery通过class名称属性,匹配元素 我们先分析,…

HTML5学习系列之项目实战1

HTML5学习系列之项目实战1 前言代码记录问题总结 前言 学习记录 代码 <div id"player"><audio id"musicbox"></audio><div id"controls" class"clearfix controls"><div id"play" class"…

Android 当中的 Fragment 协作解耦方式

Android 当中的 Fragment 协作解耦方式 文章目录 Android 当中的 Fragment 协作解耦方式第一章 前言介绍第01节 遇到的问题第02节 绘图说明 第二章 核心代码第01节 代理人接口第02节 中间人 Activity第03节 开发者A第04节 开发者B第05节 测试类 第一章 前言介绍 第01节 遇到的…

Ubuntu22.04 Apache2安装SSL证书 https

一、免费证书申请 https://help.aliyun.com/zh/ssl-certificate/user-guide/overview-of-free-certificates 得到 三、配置 执行以下命令&#xff0c;打开default-ssl.conf文件。 vim /etc/apache2/sites-available/default-ssl.conf 在default-ssl.conf配置文件中&#xff…

List is a raw type. References to generic type List<E> should be parameterized

List is a raw type. References to generic type List<E> should be parameterized 都是代码习惯问题懒

大型且复杂项目的资源管理怎么做?

职场中&#xff0c;我劝你做个“显眼包”&#xff01;作为天天背锅、踩坑、救火的项目经理&#xff0c;积极响应、随时反馈、成果汇报这些一样都不落下&#xff0c;项目才能顺利开展。这不&#xff0c;项目经理小李就是由于自己过于低调且内敛的性格&#xff0c;差点把项目都做…

影像仪全景导航,快速定位产品特征!

**在工业制造领域中&#xff0c;影像仪全景导航可以提供全景影像&#xff0c;将整个区域的图像精准地捕捉下来&#xff0c;并通过软件算法实现高效处理&#xff0c;以呈现出更加清晰和详细的视图。**这一技术不仅可以提高定位精度&#xff0c;同时还能大幅度提升定位效率。与自…

Pytorch torch.exp()的使用举例

代码实验展示: Microsoft Windows [版本 10.0.18363.1256] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0(ssd4pytorch1_2_0) C:\Users\chenxuqi>python Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.191…

轻量封装WebGPU渲染系统示例<34>-数据驱动之Json构建场景

场景和数据之间的互通&#xff1a; 场景数据化或者数据化场景&#xff0c;是当前的主流场景数据构成方式。方便传输方便交换甚至是交互。 内置数据互通机制更有利于用户在各种应用场合下实现具体的3D相关的应用需求。用户只需要关心标准的或者约定好的数据定义及操作方式就能方…

GPS信号的数字接收处理matlab仿真,包括频率点搜索,捕获跟踪,相关峰检测等步骤

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 频率点搜索 4.2. 捕获跟踪 4.3. 相关峰检测 5.算法完整程序工程 1.算法运行效果图预览 低信噪比下仿真结果如下&#xff1a; 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...…