为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻阅古今 2021-06-21 12:04:14
我想抓取 2018 年的所有 MLB 击球手统计数据。这是我目前的代码:#import modulesfrom urllib.request import urlopenfrom lxml import html#fetch url/htmlresponse = urlopen("https://www.baseball-reference.com/leagues/MLB/2018-standard-batting.shtml")content = response.read()tree = html.fromstring( content )#parse datacomment_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。我是这个网站的新手......我也是抓取/编码的新手,非常感谢我能得到的任何帮助!=)
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

1) 打印所有击球手名称

print(result)

这将打印结果对象中的所有内容。如果它没有打印您期望的内容,那么就会发生其他错误。

2) 删除引号 括号是因为它是一个数组对象。试试这个...

print(result[0])

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

3) 名字的倒序

尝试

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


查看完整回答
反对 回复 2021-06-22
?
慕慕森

TA贡献1856条经验 获得超17个赞

你只得到最后一个击球手,因为你在第一个循环中每次都覆盖 csk 的值。首先初始化空列表bat_data,然后将每个batter 添加到其中。


bat_data= []

for batter_row in blah:

    csk = blah

    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 :

    substring = x.replace(string,'')

    if substring != "":

        substring = substring.split(',')

        substring.reverse()

        substring = ' '.join(substring)

        result.append(substring)


for x in result:

    print(x)


查看完整回答
反对 回复 2021-06-22
  • 3 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信