第4章 动态网页抓取
2021/8/14 23:10:39
本文主要是介绍第4章 动态网页抓取,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
4.3.2 Selenium的实践案例
获取第一条评论数据
1 from selenium import webdriver 2 driver = webdriver.Chrome(executable_path = r'D:\Anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe') 3 driver.get("http://www.santostang.com/2018/07/04/hello-world/") 4 5 driver.switch_to.frame(driver.find_element_by_css_selector('iframe[title="livere-comment"]')) 6 driver.implicitly_wait(20) 7 comment = driver.find_element_by_css_selector('div.reply-content') 8 content = comment.find_element_by_tag_name('p') 9 print(content.text)
4.3.3 Selenium 获取某一页的所有评论
1 from selenium import webdriver 2 driver = webdriver.Chrome(executable_path = r'D:\Anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe') 3 driver.get("http://www.santostang.com/2018/07/04/hello-world/") 4 5 #driver.execute_script("window.scrollTo(0,document.body.scrollHeight);") 6 driver.switch_to.frame(driver.find_element_by_css_selector('iframe[title="livere-comment"]')) 7 driver.implicitly_wait(30) 8 comments = driver.find_elements_by_css_selector('div.reply-content') 9 #注意,这里要将element改为elements;此时comments为list类型 10 #content = comment.find_element_by_tag_name('p') 11 #print(content.text) 12 for item in comments: 13 comment = item.find_element_by_tag_name('p') 14 print(comment.text)
driver.find_elements_by_css_selector得到一个列表,注意这里是elements,为了得到当前页面所有的elements。
获取所有网页的所有评论:
代码中没有使用“下滑到页面底部”这个操作,即没有:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
但这并不影响网页内容的爬取。
由于原书中有这行代码,在解析iframe之后,这行代码就用不了了,所以要使用driver.switch_to.default_content()转回为本来的未解析的iframe。
但是下面代码中没有这个下滑操作,所以同时转回iframe的代码也不需要了。
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome(executable_path = r'D:\Anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe') 5 driver.get("http://www.santostang.com/2018/07/04/hello-world/") 6 7 j=0 8 driver.switch_to.frame(driver.find_element_by_css_selector('iframe[title="livere-comment"]')) 9 driver.implicitly_wait(30) 10 while True: 11 12 #buttons为list类型,获取一屏中页面数量 13 buttons = driver.find_elements_by_css_selector('button.page-btn') 14 bSize = len(buttons) 15 16 for i in range(0,bSize): 17 #打开文件 18 file = open(r'C:\Users\rumin\Desktop\comment.txt','a+') 19 file.write('\n') 20 file.write('=====================第%d页评论========================\n'%(i+1+j*10)) 21 22 #找到当前页所有comments 23 comments = driver.find_elements_by_css_selector('div.reply-content') 24 for item in comments: 25 comment = item.find_element_by_tag_name('p') 26 print(comment.text) 27 text = comment.text.encode('GBK', 'ignore').decode('GBk') 28 file.write(text+'\n') 29 time.sleep(2) 30 file.close() 31 32 if i<bSize-1: 33 #这里需要重新获取一下buttons列表。否则,可能会报“stale element reference”,即陈旧元素内容 34 buttons = driver.find_elements_by_css_selector('button.page-btn') 35 buttons[i+1].click() #bottons[1]~buttons[bSize-1],分别对应第2页~第bSize页 36 driver.implicitly_wait(30) 37 38 try: 39 next_page = driver.find_element_by_class_name("page-last-btn") 40 next_page.click() 41 driver.implicitly_wait(30) 42 j+=1 43 except: 44 print() 45 print("爬取结束!") 46 break
这篇关于第4章 动态网页抓取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南