python+selenium+BeautifulSoup爬取酒店评论

python+selenium+BeautifulSoup爬取酒店评论

环境与配置

本文使用的Python版本是 Anaconda Python 3.8.5
安装selenium
打开命令行cmd,输入下面的命令

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

下载驱动
火狐浏览器要下载火狐驱动geckodriver 网盘链接:
提取码:1234
添加环境变量
建议直接将geckodriver.exe放到python.exe的相同路径下,方便
其他
关于Selenium的安装与配置可以参考 python selenium firefox使用详解:

准备代码

假设我们的目标是爬取携程上某一酒店的4千多条评论
我们的目标酒店 链接:
代码部分一:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 选定火狐浏览器
browser = webdriver.Firefox()
# 通过网页地址打开网页,此时会弹出浏览器,并加载相应的网页
browser.get('https://hotels.ctrip.com/hotels/346754.html')
# 隐式等待,程序会一直等待整个页面加载完成,才能执行后续操作
# 最长等待10秒
browser.implicitly_wait(10)

更多的等待方式可以参考 Selenium的三种等待方式:

爬取代码

代码部分二:

# 设置爬取的评论页数
pagenum = 360

for n in range(pagenum):  
    # 解析网页,第二个参数为解析器
    soup = BeautifulSoup(browser.page_source, "lxml")
    # 获取所有class属性为comment的div标签
    review = soup.find_all("div", attrs={'class': 'comment'})
    # 创建一个评论列表
    reviewlist = []
    # 获取所有class属性为p的标签,并加入reviewlist里
    for r in review:
        rvw = r.find_all("p")
        reviewlist.append(rvw[0])
    # 将爬到的评论写入a.txt文件
    with open('a.txt', mode='a', encoding='gb18030', errors='ignore') as f:
        for i in range(len(reviewlist)):
            f.write("****************************************************************\n")
            f.write(str(reviewlist[i]))
            f.write('\n')
    # 输出一下爬了几次了
    print(n," time\n")
    # 由于需要使用Selenium模拟点击标签,进行评论的翻页
    # 此处获取一个class属性为"u-icon-arrowRight"的i标签,并点击
    browser.find_element_by_xpath('//i[@class="u-icon u-icon-arrowRight"]').click()
    # 隐式等待方式,10秒
    browser.implicitly_wait(10)
    #强制等待0.1秒,保险起见
    time.sleep(0.1)

最后

  • 建议使用anaconda里的jupyter notebook,可以逐步测试,很方便
  • 写入文件时使用了无视错误的方式,可能会有一点乱码
  • 如果出现报错,或许可以尝试加长0.1秒的强制等待时间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值