繁体   English   中英

如何找到正确的xpath并遍历表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM