Python Selenium Webdriver Table Values to Excel



我正在做一个从网站上抓取表格的项目。我将无法提供完整的代码,因为这是一个有登录名的公司特定网站,因此我选择了Selenium。我在HTML代码中找到了表格:

class Table:
def __init__(self, driver):
self.driver = driver
def get_row_info(self):
table_id = self.driver.find_element(By.ID, 'dgTickets')
rows = table_id.find_elements(By.TAG_NAME, "tr")
col = []
i = 0
for i in rows[0]:
i+=1
name = i.text()
col.append((name, []))
for j in range(1,len(rows)):
T = rows[j]
i = 0
for t in T.iterchildren():
data = t.text_content()
if i>0:
try:
data = int(data)
except:
pass
col[i][1].append(data)
i+=1
Dict = {title:column for (title, column) in col}

这会返回一个错误,即它不是一个可迭代的值。

我想我在这里要做的事情相对来说是不言自明的。首先,我试图返回web表,并最终将其放入pandas数据帧中进行解析。使用各种方法,我可以让列打印出它们的文本,但将其传递到表中的指定列似乎有问题。以下是我找到的返回列的一种方法:

for row in rows:
col0 = row.find_elements(By.TAG_NAME, "td")[0]

老实说,在这一点上我有点不知所措。有什么建议吗?

您可以使用pandas.read_html((将页面上的所有表作为DataFrames的列表。它工作得很快。

import selenium.webdriver
import pandas as pd
url = 'https://en.wikipedia.org/wiki/List_of_S%26P_500_companies'
driver = selenium.webdriver.Firefox()
driver.get(url)
# --- get table ---
all_tables = pd.read_html(driver.page_source, attrs={'id': 'constituents'})
df = all_tables[0]
# --- show it ---
print(df)

如果您想手动执行,但在本例中需要更长的时间。

import selenium.webdriver
import pandas as pd
url = 'https://en.wikipedia.org/wiki/List_of_S%26P_500_companies'
driver = selenium.webdriver.Firefox()
driver.get(url)
# --- get table ---
headers = []
columns = dict()
table_id = driver.find_element_by_id('constituents')
all_rows = table_id.find_elements_by_tag_name("tr")
# --- headers ---
row = all_rows[0]
all_items = row.find_elements_by_tag_name("th")
for item in all_items:
name = item.text
columns[name] = []
headers.append(name)
print(headers)
# --- data ---
for row in all_rows[1:]:
all_items = row.find_elements_by_tag_name("td")
for name, item in zip(headers, all_items):
value = item.text
columns[name].append(value)
df = pd.DataFrame(columns)
# --- show it ---
print(df)

最新更新