动态网页抓取( 如何使用浏览器渲染方法将爬取动态网页变成爬取静态网页)

优采云 发布时间: 2022-04-13 06:14

  动态网页抓取(

如何使用浏览器渲染方法将爬取动态网页变成爬取静态网页)

  

  此时,可以确定评论区的位置:

  ...

  其实这就是所谓的网页分析。通过检查元素,可以确定要提取的内容的位置,然后可以通过标签id、name、class或其他属性来提取内容!

  继续阅读:

  

  这收录一个列表,评论就在其中。这时候我们可以在网页上右键查看网页的源代码,然后Ctrl+F,输入“comment-list-box”找到这部分:

  

  我们会发现源代码里什么都没有!这个时候,你明白了吗?

  而如果我们要提取这部分动态内容,仅靠上一篇文章中的方法是不可能做到的。除非我们能够分析动态网页的url,否则如何简单高效地抓取动态网页内容呢?这里需要用到动态网页抓取神器:Selenium

  Selenium其实是一个web自动化测试工具,可以模拟用户滑动、点击、打开、验证等一系列网页操作,就像真实用户在操作一样!这样,就可以使用浏览器渲染的方式将动态网页抓取成抓取静态网页了!

  安装硒: pip install selenium

  安装成功后,简单测试:

  from selenium import webdriver

# 用selenium打开网页

driver = webdriver.Chrome()

driver.get("https://www.baidu.com")

  错误:

  WebDriverException(mon.exceptions.WebDriverException:消息:“chromedriver”可执行文件需要在 PATH 中。请参阅

  这其实是缺少谷歌浏览器驱动:chromedriver,下载后放在某个盘符下并记录位置,修改代码再次执行:

  driver = webdriver.Chrome(executable_path=r"C:\chromedriver.exe")

driver.get("https://www.baidu.com")

  笔者这里使用的是FireFox浏览器,效果是一样的,当然需要下载Firefox浏览器驱动:geckodriver

  driver = webdriver.Firefox(executable_path=r"C:\geckodriver.exe")

driver.get("https://www.baidu.com")

  

  打开成功后会显示浏览器已被控制!

  我们可以在 PyCharm 中查看 webdriver 提供的方法:

  

  当提取的内容嵌套在frame中时,我们可以通过driver.switch_to.frame来定位。很简单,我们可以直接使用

  Driver.find_element_by_css_selector、find_element_by_tag_name等提取内容。带复数s的方法提取列表,不带s的方法提取单个数据。这很容易理解。详细使用方法可以查看官方文档!

  还是以csdn博客为例:Python入门(一)环境搭建,爬取这个文章的评论,我们已经分析了评论所在的区域:

  ...

  :

  

  然后我们就可以直接通过find_element_by_css_selector获取div下的内容了:

  from selenium import webdriver

driver = webdriver.Firefox(executable_path=r"C:\geckodriver.exe")

driver.get("https://baiyuliang.blog.csdn.net/article/details/120473414")

comment_list_box = driver.find_element_by_css_selector('div.comment-list-box')

comment_list = comment_list_box.find_element_by_class_name('comment-list')

comment_line_box = comment_list.find_elements_by_class_name('comment-line-box')

for comment in comment_line_box:

span_text = comment.find_element_by_class_name('new-comment').text

print(span_text)

  结果:

  

  注意 find_element_by_css_selector 和 find_element_by_class_name 在用法上的区别!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线