python - Selenium Webscraping 出于某种原因,数据只带回部分而不是全部。不确定是否有任何动态数据在后台
问题描述
Python 和 Selenium 初学者在这里。我正在尝试抓取 Udemy 课程部分的标题。我尝试使用 find_elements_by_class_name 和其他方法,但由于某种原因只带回了部分数据。
我正在抓取的页面:https ://www.udemy.com/selenium-webdriver-with-python3/
1)我想获得章节的标题。它们是粗体标题。
2)我想获得小节的标题。
from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://www.udemy.com/selenium-webdriver-with-python3/'
driver.get(url)
main_titles = driver.find_elements_by_class_name("lecture-title-text")
sub_titles = driver.find_elements_by_class_name("title")
问题
1) 使用 main_titles,我得到的长度只有 10。它只从 Introduction 到 Modules。使用文件和那些毕竟不出来。但是,类名完全相同。不知道为什么不是。Modules / WorkingWithFiles 基本上是分界点。在这一点上,检查中的元素看起来也有所不同。他们都有相同的跨度类标签,但不知道为什么只返回部分
<span class="lecture-title-text">
Modules 标题和 WorkingWithFiles 标题之间的元素检查
在这一点上,网络爬虫崩溃了。不知道为什么。
2)使用 sub_titles,我得到了 58 个项目的长度,但是当我打印出来时,我只得到前两个:
Introduction
How to reach me anytime and ask questions? *** MUST WATCH ***
在此之后,它都是空行。不知道为什么当所有标签都有时它只拉前两个而不是其余的
<div class='title'>
也许我可以尝试使用 BeautifulSoup,但目前我正在尝试使用 Selenium 变得更好。是否有动态内容摆脱了硒刮擦,或者我没有以适当的方式刮擦它?
谢谢你们的意见。对不起,很长的帖子。我想确保我正确地描述了问题。
解决方案
您只获得前 10 个部分的原因是因为只显示了前 10 门课程。您可能已在浏览器上登录,因此当您去查看时,它会显示每个部分。.section-container--more-sections
但对我和你的爬虫来说,它只显示前 10个。在查找标题之前,你需要单击该按钮。
至于title
s 没有被正确抓取的奇怪情况:这是因为当一个元素被隐藏时,text
属性总是未定义的,这就是为什么它只适用于第一部分。我会尝试使用WebElement.get_attribute('textContent')
来抓取文本。
推荐阅读
- image - 从 svg 转换为 pdf 保留图像元数据
- java - AWS Java SDK 2.0 S3 预签名 URL 公共对象访问
- r - 在mac上编译R markdown时块输出中的编码问题
- r - 安装包错误,非零退出状态,找不到包
- javascript - 如何在javascript中验证空字符串
- javascript - 如何调试通过 HtmlService 提供的 Javascript?
- javascript - 如何实现搜索功能?
- sql - 在 ms 中存储 Select Query 输出访问现有表
- ansible - ansible zypper 安装卡在 SUSE 12 SP5 上
- xml - 包含 text() 和子节点的 node() 必须转换为大写文本