Python 3.x 表格中的数据在一行中打印到csv

Python 3.x 表格中的数据在一行中打印到csv,python-3.x,csv,xpath,web-scraping,Python 3.x,Csv,Xpath,Web Scraping,我已经编写了一个脚本来解析网站第一个表中的数据。我已经使用xpath解析了表。顺便说一句,我没有使用tr标签,因为没有使用它,我仍然可以在控制台中看到打印结果。当我运行脚本时,数据会被刮取,但会打印在csv文件中的一行中。我找不出我犯的错误。对此的任何意见都将不胜感激。以下是我尝试过的: import csv import requests from lxml import html url="https://fantasy.premierleague.com/player-list/" re

我已经编写了一个脚本来解析网站第一个表中的数据。我已经使用xpath解析了表。顺便说一句,我没有使用tr标签,因为没有使用它,我仍然可以在控制台中看到打印结果。当我运行脚本时,数据会被刮取,但会打印在csv文件中的一行中。我找不出我犯的错误。对此的任何意见都将不胜感激。以下是我尝试过的:

import csv
import requests
from lxml import html

url="https://fantasy.premierleague.com/player-list/"
response = requests.get(url).text
outfile=open('Data_tab.csv','w', newline='')
writer=csv.writer(outfile)
writer.writerow(["Player","Team","Points","Cost"])
tree = html.fromstring(response)
for titles in tree.xpath("//table[@class='ism-table']")[0]:
    # tab_r = titles.xpath('.//tr/text()')
    tab_d = titles.xpath('.//td/text()')
    writer.writerow(tab_d)

您可能希望添加一个级别的循环,依次检查每个表行

试试这个:

for titles in tree.xpath("//table[@class='ism-table']")[0]:
    for row in titles.xpath('./tr'):
        tab_d = row.xpath('./td/text()')
        writer.writerow(tab_d)
或者,也许是这样:

table = tree.xpath("//table[@class='ism-table']")[0]
for row in table.xpath('.//tr'):
    items = row.xpath('./td/text()')
    writer.writerow(items)
或者,您可以让第一个XPath表达式为您查找行:

rows = tree.xpath("(.//table[@class='ism-table'])[1]//tr")
for row in rows:
    items = row.xpath('./td/text()')
    writer.writerow(items)

谢谢你,罗伯先生ᵩ, 为您的强健解决方案。这两种代码都非常棒。