首页 > 解决方案 > 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 变得更好。是否有动态内容摆脱了硒刮擦,或者我没有以适当的方式刮擦它?

谢谢你们的意见。对不起,很长的帖子。我想确保我正确地描述了问题。

标签: pythonmacosseleniumselenium-webdriverweb-scraping

解决方案


您只获得前 10 个部分的原因是因为只显示了前 10 门课程。您可能已在浏览器上登录,因此当您去查看时,它会显示每个部分。.section-container--more-sections但对我和你的爬虫来说,它只显示前 10个。在查找标题之前,你需要单击该按钮。

至于titles 没有被正确抓取的奇怪情况:这是因为当一个元素被隐藏时,text属性总是未定义的,这就是为什么它只适用于第一部分。我会尝试使用WebElement.get_attribute('textContent')来抓取文本。


推荐阅读