pandas HTML文件与Javascript - Python

vhmi4jdf  于 2023-05-21  发布在  Java
关注(0)|答案(2)|浏览(203)

bounty还有7天到期。回答此问题可获得+50声望奖励。Dini想要引起更多关注这个问题:我真的需要这方面的帮助,所以如果你能给予我的代码,我会非常感激。

我真的需要帮助。我必须读取数千个HTML文件来提取数据集的值,但HTM文件有javascript,pandas会给我变量的名称而不是值。我使用的代码非常简单,使用pandas读取它,然后查找它找到的表。我将分享一个链接的HML文件,代码和图像的价值,我试图得到。谢谢你。

url = "https://raw.githubusercontent.com/OperationsMD/powermill/main/Project_Summary.html"
import pandas as pd

df_mill = pd.read_html(url)
print(df_mill[2])

当我应该得到:总速度:03:09:09我在图片中看到的

k75qkfdt

k75qkfdt1#

首先,我认为这不是解决这个问题的最佳方法。我使用selenium web驱动来执行javascript。由于数据隐藏在XML文件后面,我将其转换为HTML,然后使用Selenium打开HTML对象。这允许浏览器执行JavaScript。对于驱动程序,我使用了undetected_chromedriver,因为它对我来说更容易安装。

import pandas as pd
import requests
from bs4 import BeautifulSoup
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By

url = "https://raw.githubusercontent.com/OperationsMD/powermill/main/Project_Summary.html"
Doc = requests.get(url)
Con = Doc.content 
soup_obj = BeautifulSoup(Con , "lxml") 
driver = uc.Chrome(use_subprocess=True)
driver.get("data:text/html;charset=utf-8," + str(soup_obj))

tableData = driver.find_element(By.ID,"pdTime")
df = pd.read_html(driver.page_source)

print(df[1])
# Close the browser
driver.quit()

别忘了安装Selenium。

zzoitvuj

zzoitvuj2#

但是HTM文件有javascript,pandas给我的是变量名而不是值。
那就是说...你需要实际执行JavaScript部分来获取这些值。
虽然Pandas非常适合处理结构化数据,如HTML页面中的表,但它不执行JavaScript代码。因此,它将无法检索JavaScript设置的值。
一种可能的方法是使用selenium 4.9.1,这是Selenium WebDriver的Python语言绑定:一个Python库,允许您自动执行浏览器操作。
Selenium实际上会在一个真实的的浏览器中加载网页,执行任何JavaScript,然后允许您访问生成的DOM(文档对象模型),包括JavaScript所做的任何修改。
下面是一个如何使用Selenium检索您要查找的值的示例:

from selenium import webdriver

# path to the chromedriver executable
chromedriver_path = '/path/to/chromedriver'

# create a new browser session
driver = webdriver.Chrome(executable_path=chromedriver_path)

# direct the driver to the webpage
url = "https://raw.githubusercontent.com/OperationsMD/powermill/main/Project_Summary.html"
driver.get(url)

# get the value of a JavaScript variable
total_time = driver.execute_script("return totalTime;")

# print the value
print(total_time)

# end the Selenium browser session
driver.quit()

这段代码启动一个新的浏览器会话,导航到所需的网页,然后检索totalTimeJavaScript变量的值。
请将'/path/to/chromedriver'替换为您安装ChromeDriver的路径。你可以download the ChromeDriver from here
这是一个有效的方法为 * 一个 * 页。为了上千...您可能会遇到资源问题,因此要逐步测试它!(而且看起来不像是DDos攻击;不要在太短的时间内完成太多的请求。

相关问题