由于某些原因,数据只能带来部分而不是全部。不确定后台是否有动态数据

2024-04-24 11:20:38 发布

您现在位置:Python中文网/ 问答频道 /正文

Python和Selenium初学者。我正在努力拼凑全班一节课的题目。我试过使用find\u elements\u by\u class\u 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)使用主标题,我得到的长度只有10。它只从介绍到模块。处理文件和文件终究不会出来。但是,类名完全相同。不知道为什么不是。模块/与文件一起工作基本上是分界点。检查中的元素在这一点上看起来也不同。它们都有相同的span class标记,但不确定为什么只返回partial

<span class="lecture-title-text">

Element Inspection between Modules title and WorkingWithFiles title

在这一点上,webscrape崩溃了。不知道为什么。你知道吗

2)使用子标题,我得到的长度是58项,但当我打印出来时,我只得到前两项:

Introduction
How to reach me anytime and ask questions? *** MUST WATCH ***

在这之后,都是空行。不知道为什么只有前两名,而不是其他所有的标签都有

<div class='title'>

也许我可以尝试使用BeautifulSoup,但目前我正在尝试更好地使用Selenium。有没有一个动态内容扔掉硒刮或我刮它在一个适当的方式?你知道吗

谢谢你们的意见。抱歉,邮件太长了。我想确保我描述的问题是正确的。你知道吗


Tags: 文件namehttps标题bytitlewwwdriver
2条回答

好的,我已经把评论中的建议看了一遍,已经解决了。我把它写在这里,以防将来有人想看看这个解决方案是怎么回事。你知道吗

1)使用建议,我发出了一个命令,点击“24个更多部分”展开选项卡,然后将其刮除,效果非常好!你知道吗

driver.find_element_by_class_name("js-load-more").click()
titles = driver.find_elements_by_class_name("lecture-title-text")
for each in titles:
    print (each.text)

这就扯掉了所有34个章节的标题。你知道吗

2)根据Matt的建议,我找到了WebElement,并使用get_属性('textContent')提取文本数据。有很多空格,所以我使用split()只获取字符串。你知道吗

sub_titles = driver.find_elements_by_class_name("title")
for each in sub_titles:
    print (each.get_attribute('textContent').strip())

这把所有的头衔都扯了!你知道吗

之所以你只得到前10节课,是因为只有前10节课显示。您可能已登录到浏览器,因此当您要签出它时,它会显示每个部分。但对我和你的刮刀来说,它只显示前10个。在查找标题之前,您需要单击.section-container more-sections按钮。你知道吗

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

相关问题 更多 >