当前位置:   article > 正文

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

ant pagination爬虫
  • 引言

人生苦短,我用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程序,输入并跳转到相应的页码后,爬取景点的评论;

  • 完整代码:

  1. import time
  2. import codecs
  3. from selenium import webdriver #从selenium库中调用webdriver模块
  4. from bs4 import BeautifulSoup #从 bs4模块中 引入BeautifulSoup,在结合的情况下选用
  5. #from selenium.webdriver.chrome.options import Options # 从options模块中调用Options类
  6. # 把Chrome浏览器设置为静默模式1
  7. #chrome_options = Options() # 实例化Option对象
  8. # 把Chrome浏览器设置为静默模式2
  9. #chrome_options.add_argument('--headless')
  10. # 把Chrome浏览器设置为静默模式3
  11. #driver = webdrihttp://you.ctrip.com/ver.Chrome(options = chrome_options) # 设置引擎为Chrome,在后台默默运行
  12. # 把Chrome浏览器设置为静默模式4
  13. driver = webdriver.Chrome() # 可视化运行
  14. #设置引擎为Chrome,从本地打开一个Chrome浏览器
  15. myfile=codecs.open('龙虎山.txt','a+',"utf-16")
  16. #龙虎山
  17. driver.get('https://you.ctrip.com/sight/nanchang175/107384.html')
  18. #龙虎山
  19. # 访问页面
  20. time.sleep(3)
  21. #延迟时间,等待页面加载完成
  22. x=1#起始页码
  23. while x<=5:#结束页码
  24. HTML =BeautifulSoup(driver.page_source,'html.parser')
  25. comments = HTML.find(class_='commentList').find_all(class_='commentDetail') #使用class_name找到评论
  26. #print(len(comments))
  27. #上两行代码运用beautiful方法解析,如果不用,注释上两行代码并解除注释下一行代码,实现功能一样
  28. #comments = driver.find_element_by_class_name('commentList').find_elements_by_class_name('commentDetail') #使用class_name找到评论
  29. for i in range(len(comments)):
  30. write_str='第'+str(i-9+x*10)+'条评论:\r\n'+comments[i].text+'\r\n---------------------------\r\n'
  31. myfile.write(write_str)#保存评论
  32. #print ('评论'+str(k)+':'+comments[i].text + '\n-------------------------------------------------') #打印评论
  33. print('第'+str(x)+'页'+"加载完毕")
  34. try:
  35. x=x+1#下一页
  36. time.sleep(3)
  37. jumper = driver.find_element_by_class_name('ant-pagination-options-quick-jumper').find_element_by_tag_name('input')
  38. jumper.send_keys(x) #输入页码方法
  39. clickforjump = driver.find_element_by_class_name('ant-pagination-options-quick-jumper').find_element_by_class_name('jumpButton')
  40. #clickforjump.click()#直接点击确定
  41. clickforjump.send_keys("\n")#输入回车方法点击确定
  42. '''#下一页方法
  43. clickformore = driver.find_element_by_class_name('ant-pagination').find_element_by_class_name('ant-pagination-next')
  44. time.sleep(3)
  45. clickformore.click() #下一页方法
  46. '''#下一页方法
  47. except:
  48. print("不能再点击加载更多啦")
  49. break
  50. driver.close() # 关闭浏览器
  51. myfile.close() # 关闭文件
  52. 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() # 关闭文件),节省资源,也避免程序正在打开的文件因为权限问题不能手动打开;

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

  • 尾声:

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/616372
推荐阅读
相关标签
  

闽ICP备14008679号