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是为了去除标点符号、特殊字符和语气助词,在主页的其他文章里有提供。

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

其他项目地址

python爬取旅游网站景点评论数据_词云-CSDN博客

Python爬取当当网评论通常涉及网络爬虫技术,使用如requests库获取网页内容,然后BeautifulSoup、Scrapy等库解析HTML提取评论信息。以下是简要步骤: 1. **安装所需库**:首先需要安装`requests`用于发送HTTP请求,`beautifulsoup4`或`lxml`用于解析HTML。 ```bash pip install requests beautifulsoup4 ``` 2. **发送GET请求**:通过`requests.get()`函数访问当当网商品详情页URL,获取网页源码。 ```python import requests url = "https://product.dangdang.com/XX-XX-XX" # 替换为实际商品链接 response = requests.get(url) ``` 3. **解析HTML**:使用BeautifulSoup解析响应的HTML内容,找到包含评论的区域。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') comments_container = soup.find('div', {'class': 'comment-list'}) # 类名可能会变化,需根据实际情况查找 ``` 4. **提取评论信息**:遍历评论容器内的每个评论元素,提取评论文本、作者、时间等信息。这可能涉及到CSS选择器或XPath表达式。 ```python comments = comments_container.find_all('li') # 或其他标签,视情况而定 for comment in comments: text = comment.find('span', {'class': 'review-text'}).text.strip() author = comment.find('span', {'class': 'author'}).text.strip() timestamp = comment.find('time')['datetime'] print(f"{author} - {timestamp}: {text}") ``` 5. **处理数据存储**:如果想保存评论到文件或数据库,可以考虑使用pandas库或者其他合适的方式。 注意: - 网站可能会有反机制,如验证码、IP限制等,所以爬取前应检查并遵守网站的robots.txt规则。 - 长期大量爬取可能会对服务器造成压力,因此建议设置合适的延迟(`time.sleep()`)并尊重网站的爬虫政策。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guff_hys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值