![](/img/trans.png)
[英]How can I iterate over xpath subsets without a very slow for loop?
[英]How can I find the right xpath and loop over table?
我想从https://powerhouse.net/forecast-prijzen-onbalans/上的“ Elektriciteit NL”表中获取所有值。 但是,在尝试使用硒无休止地寻找正确的xpath之后,我无法刮擦桌子。
我尝试使用“检查”并从表中复制xpath以确定表的长度,以便以后进行抓取。 在此失败之后,我尝试使用“包含”,但是这也不成功。 之后,我尝试了一些使用BeautifullSoup的方法,但是没有任何运气。
#%%
import pandas as pd
from selenium import webdriver
import pandas as pd
#%% powerhouse Elektriciteit NL base & peak
url = "https://powerhouse.net/forecast-prijzen-onbalans/"
#%% open webpagina
driver = webdriver.Chrome(executable_path = path + 'chromedriver.exe')
driver.get(url)
#%%
prices = []
#loop for values in table
for j in range(len(driver.find_elements_by_xpath('//tr[@id="endex_nl_forecast"]/div[3]/table/tbody/tr[1]/td[4]'))):
base = driver.find_elements_by_xpath('//tr[@id="endex_nl_forecast"]/div[3]/table/tbody/tr[1]/td[4]')[j]
#%%
#trying with BeautifulSoup
from bs4 import BeautifulSoup
import requests
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
table = soup.find('table', id = 'endex_nl_forecast')
rows = soup.find_all('tr')
我想在数据框中使用表格,并了解xpath的工作原理。 我是整个概念的新手。
如果您对xpath以外的方法持开放态度,则可以在没有硒或xpath的情况下执行此操作:
你可以只用熊猫
import pandas as pd
table = pd.read_html('https://powerhouse.net/forecast-prijzen-onbalans/')[4]
如果要用图标表示文本,则可以从相应的td
提取描述箭头方向的svg
类名。
from bs4 import BeautifulSoup as bs
import requests
import pandas as pd
r = requests.get('https://powerhouse.net/forecast-prijzen-onbalans/')
soup = bs(r.content, 'lxml')
table = soup.select_one('#endex_nl_forecast table')
rows = []
headers = [i.text for i in table.select('th')]
for tr in table.select('tr')[1:]:
rows.append([i.text if i.svg is None else i.svg['class'][2].split('-')[-1] for i in tr.select('td') ])
df = pd.DataFrame(rows, columns = headers)
print(df)
样本行:
您可以使用Selenium驱动程序来查找表及其内容,
url = 'https://powerhouse.net/forecast-prijzen-onbalans/'
driver.get(url)
time.sleep(3)
阅读表标题并打印
tableHeader = driver.find_elements_by_xpath("//*[@id='endex_nl_forecast']//thead//th")
print(tableHeader)
for header in tableHeader:
print(header.text)
查找表中的行数
rowElements = driver.find_elements_by_xpath("//*[@id='endex_nl_forecast']//tbody/tr")
print('Total rows in the table:', len(rowElements))
按原样打印每行
for row in rowElements:
print(row.text)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.