首页 > 解决方案 > 如何在网上刮掉所有击球手的名字?

问题描述

我想抓取 2018 年所有 MLB 击球手的统计数据。这是我到目前为止的代码:

#import modules

from urllib.request import urlopen
from lxml import html

#fetch url/html

response = urlopen("https://www.baseball-reference.com/leagues/MLB/2018-standard-batting.shtml")
content = response.read()
tree = html.fromstring( content )

#parse data

comment_html = tree.xpath('//comment()[contains(., "players_standard_batting")]')[0]
comment_html = str(comment_html).replace("-->", "")
comment_html = comment_html.replace("<!--", "")
tree = html.fromstring( comment_html )
for batter_row in tree.xpath('//table[@id="players_standard_batting"]/tbody/tr[contains(@class, "full_table")]'):
    csk = batter_row.xpath('./td[@data-stat="player"]/@csk')[0]

当我刮掉所有的击球手时,每个名字都附有 0.01。我尝试使用以下代码删除附加的数字:

bat_data = [csk]
string = '0.01'
result = []

for x in bat_data :
    if string in x:
        substring = x.replace(string,'')
        if substring != "":
            result.append(substring)
    else:
        result.append(x)
print(result)

此代码删除了数字,但是,仅打印了姓氏:

输出:

['Zunino, Mike']

此外,名称周围有括号和引号。名字也是倒序的。

1) 如何打印所有击球手的姓名?

2)如何删除引号和括号?

3) 我可以颠倒姓名的顺序,以便先打印名字然后再打印姓氏吗?

我希望的最终输出将是所有击球手的名字:Mike Zunino。

我是这个网站的新手......我也是抓取/编码的新手,非常感谢我能得到的任何帮助!=)

标签: pythonxpathweb-scrapinglxml

解决方案


1) 打印所有击球手名称

print(result)

这将打印结果对象中的所有内容。如果它没有打印您期望的内容,那么还有其他问题。

2)删除引号 括号是由于它是一个数组对象。尝试这个...

print(result[0])

这将告诉解释器在 0 索引处打印结果。

3) 名字倒序

尝试

name = result[0].split(“ “).reverse()[::-1]

推荐阅读