【问题标题】:Scrape a web page's contents using Python/selenium使用 Python/selenium 抓取网页内容
【发布时间】:2025-12-22 08:45:10
【问题描述】:

我正在尝试抓取 table 的内容。我相信表格是用 JavaScript 呈现的,所以我使用了selenium 包和Python3。为了完成这样的任务,我已经看到 others 找到表 xpath 以抓取其内容,但我只是不确定如何识别正确的 xpath。

如何提取表格内容?如果使用 xpath,我如何通过检查网页的源来识别与表或其内容对应的正确 xpath?

from selenium import webdriver                                                                                                                                                                                                                                              
driver = webdriver.Chrome('path/to/chromedriver.exe')                                      
url = https://ultrasignup.com/results_event.aspx?did=6727
driver.get(url)

# Now I need to get the tables contents. I might do something like this:
table = driver.find_elements_by_xpath('my_xpath')
table_html = table.get_attribute('innerHTML') # not sure what innerHTML is...
df = read_html(table_html)[0]
print(df)
driver.close()     

【问题讨论】:

  • 我相信没有必要刮,因为他们有一个API。如果您访问此链接,您将看到您提供的表格中格式良好的数据:ultrasignup.com/service/events.svc/results/6727/json?rows=1500
  • 被测页面有很多带有id属性的页面元素。通过id 定位将不那么脆弱; YMMV。
  • @andreilozhkin 您开始发布一些看起来很有帮助的代码,但随后将其删除。如果你把它备份,我可以接受你的回答!

标签: javascript python-3.x selenium web-scraping selenium-chromedriver


【解决方案1】:

您可以通过检查表的元素并查看源代码来识别正确的 xpath。 在您看到哪些标签是表格内容后,您必须逐步创建您的 xpath。

例如:


<div class="test">
<p class="test2">
<table class="test3"> 
<!--May have more attributes-->
contents...
</table>
</p>
</div>

然后你开始你的xpath //div[@class="test"] 现在你在 div 里面,

下一步: //div[@class="test"]//p[@class="test2"] 现在你在段落标签内

最后一步:

xpath = "//div[@class='test']//p[@class='test2']//table[@class='test3']"

table = driver.find_elements_by_xpath('xpath')

现在您可以访问表格并获取您想要的任何属性甚至表格内容

【讨论】:

  • 感谢YOGOVO,这开始帮助我更好地理解html源代码的结构。您能否根据我提供的网页示例识别示例 xpath?我仍在努力从源代码中识别正确的标签。
【解决方案2】:

我相信没有必要刮,因为他们有 API。

如果您访问此链接,您会从您提供的表格中看到格式精美的数据:https://ultrasignup.com/service/events.svc/results/6727/json

一些代码:

import json, requests

url = 'https://ultrasignup.com/service/events.svc/results/6727/json'

response = requests.get(url)

# Get all people from the table
people = [x for x in response.json()] 

# Print first person's information
print(people[0]) 

希望对你有帮助!

【讨论】: