211:Python学习之爬虫篇——用selenium工具爬取某旅游网站评论储存到记事本(可结合BeautifulSoup方法解析)

  • 引言

人生苦短,我用Python。时年六月,岁属夏至......(跑偏了!)这两天在做旅游网站评论爬取,用作***的满意度调查,IPA分析巴拉巴拉的。

  • 软件及工具:

Python3.7、Sublime Text 3、Google Chrome(81.0.4044.138)、Chromewebdriver

(为啥提到浏览器版本号,因为要对应的Chromedriver)Chromewebdriver下载地址

下载时选取对应版本,Windows选取chromedriver_win32.zip,win10 64位实测有效。

提醒一下Chromedriver需要和chrome以及python的执行文件在同一目录下,如果这两步完成后你还是不能使用webdriver,那么你需要将它添加到环境变量中。

  • Python需要引入的模块及方法:

import time

import codecs

from selenium import webdriver #从selenium库中调用webdriver模块

from bs4 import BeautifulSoup #从 bs4模块中 引入BeautifulSoup,在结合的情况下选用

#from selenium.webdriver.chrome.options import Options

# 从options模块中调用Options类(静默模式下需要,即使用看不到浏览器运行界面的方式运行)

注:如果没有对应的模块,管理员身份打开任务管理器,使用pip install xxx 安装(xxx为对应模块名),下载安装模块时可能会报超时错误,重试就好,一次不行就多试几次;

selenium是一个web自动化工具,这里的应用是自动运行Google Chrome程序,输入并跳转到相应的页码后,爬取景点的评论;

  • 完整代码:

import time
import codecs
from selenium import webdriver #从selenium库中调用webdriver模块
from bs4 import BeautifulSoup #从 bs4模块中 引入BeautifulSoup,在结合的情况下选用
 
#from selenium.webdriver.chrome.options import Options # 从options模块中调用Options类
# 把Chrome浏览器设置为静默模式1
#chrome_options = Options() # 实例化Option对象
# 把Chrome浏览器设置为静默模式2
#chrome_options.add_argument('--headless') 
# 把Chrome浏览器设置为静默模式3
#driver = webdrihttp://you.ctrip.com/ver.Chrome(options = chrome_options) # 设置引擎为Chrome,在后台默默运行
# 把Chrome浏览器设置为静默模式4
 
 
driver = webdriver.Chrome() # 可视化运行
#设置引擎为Chrome,从本地打开一个Chrome浏览器
 
myfile=codecs.open('龙虎山.txt','a+',"utf-16")
#龙虎山
 
driver.get('https://you.ctrip.com/sight/nanchang175/107384.html') 
#龙虎山
# 访问页面
 
time.sleep(3)
#延迟时间,等待页面加载完成
x=1#起始页码
while x<=5:#结束页码
 
	HTML =BeautifulSoup(driver.page_source,'html.parser')
	comments = HTML.find(class_='commentList').find_all(class_='commentDetail') #使用class_name找到评论
	#print(len(comments))
	#上两行代码运用beautiful方法解析,如果不用,注释上两行代码并解除注释下一行代码,实现功能一样
	#comments = driver.find_element_by_class_name('commentList').find_elements_by_class_name('commentDetail') #使用class_name找到评论
	for i in range(len(comments)):
		write_str='第'+str(i-9+x*10)+'条评论:\r\n'+comments[i].text+'\r\n---------------------------\r\n'
		myfile.write(write_str)#保存评论
 
		#print ('评论'+str(k)+':'+comments[i].text + '\n-------------------------------------------------') #打印评论 
	print('第'+str(x)+'页'+"加载完毕")
	try:
		x=x+1#下一页
		time.sleep(3)
		jumper = driver.find_element_by_class_name('ant-pagination-options-quick-jumper').find_element_by_tag_name('input')
		jumper.send_keys(x)   #输入页码方法
		clickforjump = driver.find_element_by_class_name('ant-pagination-options-quick-jumper').find_element_by_class_name('jumpButton')
		#clickforjump.click()#直接点击确定
		clickforjump.send_keys("\n")#输入回车方法点击确定
		'''#下一页方法
		clickformore = driver.find_element_by_class_name('ant-pagination').find_element_by_class_name('ant-pagination-next')
		time.sleep(3)
		clickformore.click() #下一页方法
		'''#下一页方法
	except:
		print("不能再点击加载更多啦")
		break
 
driver.close() # 关闭浏览器
myfile.close() # 关闭文件
print("程序结束")
  • 列坑:

有很多坑,一个一个列一下:

  1. 静默模式,这个模式的优势在于,不打扰你在程序运行的时候做其他的事儿,不占用你的界面,但是如果程序运行过程中报错,这个进程不好关闭,因为你可能还在打开并使用其他Google浏览器标签页,任务管理器会出现多个google.exe进程,不知道要关闭的是哪个进程。建议调试过程用可视化界面,程序调试成功后,实际程序长时间运行的时候用静默模式;

  2. selenium这个模块是在用其他爬虫方法爬取动态网页不方便时的无奈之举,如果是静态网页或者能用更省资源的方法,可以优先考虑其他方法;

  3. 记事本写入的过程坎坷反复,因为网站是utf-8,但是获取后,评论中含有Unicode格式的字符,写入几条程序就会报错,由于程序中使用了(try-excpt),所以程序不报错。最后处理方法参照代码;

    手动从编译器输出框复制到记事本,保存时出现的提示!
  4. 注意find_element是查找第一个元素,find_elements是查找所有元素,是一个列表,列表中的元素用(for XXX in XXXX)处理,逐个遍历每个列表的评论(把element换成复数elements实现提取多个元素);

    注:取数据的方法都是英文直译的意思

     

  5. 如果使用BeautifulSoup方法进行解析,注意上面的注释部分;

    BeautifulSoup的工作方式

     

  6. 在输入页面后点击确认时,使用XXX.click()输出的响应有时会被页面上的其他元素获取,所以改用XXX.send_keys("\n"),输入回车的方法点击确定;

  7. 程序运行的时候,有时候不知道它的进度(爬到多少页了),于是加上了for循环后的print('第'+str(x)+'页'+"加载完毕"),可以直观的知道当前进度,有没有无伤大雅,但用起来会更方便;

  8. 程序结束后要让他自动关闭浏览器和文件(driver.close() # 关闭浏览器  myfile.close() # 关闭文件),节省资源,也避免程序正在打开的文件因为权限问题不能手动打开;

注释写的还是比较清楚的,如果很多都看不懂或者不会的话建议参考我的其他基础爬虫博文(如果我愿意写的话,不然就去找别人的!逃!!!!)或者直接评论交流

  • 尾声:

写的很快,半小时交作文博客了!发布后自己看了一遍,又花了快一个小时把坑补上。。。

当然,关注,评论,点赞,收藏,你才可以更快更方便地找到我的文章。

留言我看到都会第一时间回复!

请获准后转载并注明出处!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值