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

优采云 发布时间: 2021-09-28 05:10

  php如何抓取网页内容(

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

  

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

  ...

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

  继续往下看:

  

  它收录一个列表,注释也在其中。这时候我们可以在网页上右击查看网页源码,然后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浏览器,效果是一样的,当然要下载火狐浏览器驱动: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人工客服


线