【发布时间】:2021-06-28 09:20:03
【问题描述】:
我在激活搜索功能后尝试获取标题列表,但即使在查找 h3 类标题的各种迭代时路径正确,我仍然得到一个空列表。请参阅下面的示例,说明我要复制的一个标题位于 HTML 中的位置。类类型每次都在变化,但位置总是在h3之内。
所以我尝试使用下面的代码来提取标题列表:
import pandas as pd
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver.firefox.options import Options
options = Options()
options.set_preference("dom.push.enabled", False)
browser = webdriver.Firefox(options=options)
browser.get("https://medium.com/search")
browser.find_element_by_xpath("//input[@type='search']").send_keys("Flying elephant",Keys.ENTER)
titles = browser.find_elements_by_xpath("//h3[contains(@class,'graf')]")
lista = []
for names in titles:
print(names.text)
lista.append(names.text)
browser.quit()
代码运行,但我返回的列表没有任何元素。感谢您提供任何帮助我解决此问题的提示
【问题讨论】:
-
也许尝试获取
"//h3"并检查它是否具有class以及它在class中的值。一些服务器可能会在类中使用随机值,并为不同的用户创建不同的值。 -
是的,我确实通过检查源找到了它,并且有一个常量类值。下面的解决方案解决了我的问题。
-
我要求用 selenium 检查它 - 而不是通过手动检查源。您还可以查看
browser.page_source以了解您在 selenium 中真正得到了什么。但我看到你已经得到了答案。等待数据通常是检查问题的第二步(因为 JavaScript 需要一些时间来添加 HTML) -
这是一个很好的提示,page_source 的问题是我得到一个文本转储而不是一个很好的 html 结构,你知道是否有一个命令我可以运行来查看它是层次感的结构吗?
-
您可以将
page_source与BeautifulSoup或lxml一起使用,其中一些可能具有重新格式化它的功能。但是 HTML 可能在某些地方有新行\n,这些功能即使在重新格式化后也可能会保留它们,并且看起来不像您期望的那样。
标签: python html selenium web-scraping webdriverwait