猿问

如何通过网络抓取所有击球手的名字?

我想抓取 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。


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


翻阅古今
浏览 121回答 3
3回答

宝慕林4294392

1) 打印所有击球手名称print(result)这将打印结果对象中的所有内容。如果它没有打印您期望的内容,那么就会发生其他错误。2) 删除引号&nbsp;括号是因为它是一个数组对象。试试这个...print(result[0])这将告诉解释器在 0 索引处打印结果。3) 名字的倒序尝试name&nbsp;=&nbsp;result[0].split(“&nbsp;“).reverse()[::-1]

慕慕森

你只得到最后一个击球手,因为你在第一个循环中每次都覆盖 csk 的值。首先初始化空列表bat_data,然后将每个batter 添加到其中。bat_data= []for batter_row in blah:&nbsp; &nbsp; csk = blah&nbsp; &nbsp; bat_data.append(csk)这将为您提供所有击球手的列表, ['Abreu,Jose0.01', 'Acuna,Ronald0.01', 'Adam,Jason0.01', ...]然后循环遍历此列表,但您不必检查string名称中是否包含它。只需执行x.replace('0.01', '')然后检查字符串是否为空。颠倒名称顺序substring = substring.split(',')substring.reverse()nn = " ".join(substring)然后将 nn 附加到结果中。你得到引号和括号是因为你正在打印列表。而是遍历列表并打印每个项目。假设您正确获得了 bat_data,您的代码已编辑:for x in bat_data :&nbsp; &nbsp; substring = x.replace(string,'')&nbsp; &nbsp; if substring != "":&nbsp; &nbsp; &nbsp; &nbsp; substring = substring.split(',')&nbsp; &nbsp; &nbsp; &nbsp; substring.reverse()&nbsp; &nbsp; &nbsp; &nbsp; substring = ' '.join(substring)&nbsp; &nbsp; &nbsp; &nbsp; result.append(substring)for x in result:&nbsp; &nbsp; print(x)
随时随地看视频慕课网APP

相关分类

Python
我要回答