【问题标题】:Data getting scraped in a single column instead of table format数据在单列而不是表格格式中被抓取
【发布时间】:2017-06-24 13:03:42
【问题描述】:

我在 python 中编写了一个脚本,使用 selenium 从网页中的表格中解析数据。但是,当我运行它时,我会在单个列中而不是表格格式中获取数据。我应该在脚本中进行什么类型的更改以获取表格格式的数据?到目前为止,这是我尝试过的:

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://fantasy.premierleague.com/player-list/")

table_data = driver.find_elements_by_xpath("//table[@class='ism-table']")[0]

for item in table_data.find_elements_by_xpath(".//td"):

    print(item.text)

driver.quit()

我所说的表格格式如下所示。但是,我在单列中获取数据,而不是像下面这样的多列。

【问题讨论】:

  • 您不需要指定前锋、中场、守门员和后卫的球员吗?你循环数据的方式不会给你这个字符。一般来说,硒也太“重”了,我只会将它用作最后的选择。您正在解析的这个特定页面结构良好,我建议使用 BeautifulSoup。
  • “表格格式”是什么意思?请具体说明。
  • 他想要呈现的表格.. 但正如您所知,当您刮掉整个表格行时,然后使用带有范围的另一个循环......我的意思是......这是常见的事情在每个方面列表中将所有项目或值一起刮掉,然后使用熊猫将它们全部拍打在一起......或者在每个克洛姆都有它的值和键之后......格式打印或打印所有在同一时间...我的意思是...没有bs4?你需要一个真正的解析器
  • 啊,好吧...,刚刚看到您的照片...您必须按列拆分表格,以便您创建一个列表,然后可以在范围内重复范围并格式化打印输出...更多解释起来比大声笑更复杂......不能通过一个大文本拆分来迭代......]
  • 真的很好!!您可以拆分... b

标签: python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

试试

for item in table_data.find_elements_by_xpath(".//tr"):
    print(item.text.split())

它会分别为您提供每个玩家的列表。

注意,.find_elements_by_xpath() 中的标记已更改

此外, 你可以像这样制作可读的表格:

...(your previous code)...
data=[]
for item in table_data.find_elements_by_xpath(".//tr"):
    data.append(item.text.split())

format_table = '{:8s}' + 4 * '{:>10s}'
for lst in data:
    print(format_table.format(*lst))

另一个版本(正确捕获带有空格的名称,例如“de Goa”):

data=[]
temp=[]
for item in table_data.find_elements_by_xpath(".//tr"):
    for i in item.find_elements_by_xpath('td'):
        temp.append(i.text)
    data.append(temp)
    temp=[]

【讨论】:

  • 感谢 Dmitriy Fialkovskiy 的有力回答。它达到了我的预期。仅供参考,如果不是 selenium,我知道如何使用 bs4 或 xpath 解析该表。我被卡住了,因为我从来没有用硒刮过任何桌子。那是因为我选择了那个页面。再次非常感谢。
  • 嗨 Dmitriy Fialkovskiy,最后一件事你可能会考虑从这个线程中观看。拆分功能在这里会造成一些麻烦。如果任何玩家的姓名由空格分隔,如“de Gea”,则它会创建一个新列以单独显示单个姓名,而该表的列号应始终为四。当您点击链接时,您会更加清楚。您想到的任何解决方法!提前致谢。 "dropbox.com/s/79frhafppxs32cn/player_list.csv?dl=0"
  • 修改了我的答案,请检查是否合适
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 2021-05-22
  • 2021-03-23
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多