【问题标题】:How can I scrape hrefs into a Pandas dataframe?如何将 href 抓取到 Pandas 数据框中?
【发布时间】:2021-08-16 20:56:28
【问题描述】:

我想区分两个同名的联赛,都是“Primera Division”,我希望从联赛的网址中获取国家/地区名称并将其附加到比赛中,创建“Primera Division Peru”或“Primera乌拉圭分部”。

这是一个代码sn-p:

class ls:
  url = "https://www.livesoccertv.com/channels/goltv-play"
  page = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) 
  data = urllib.request.urlopen(page).read()

df = pd.read_html(ls.data, index_col=False)[0]

df.columns = ["live", "date", "time", "hometeam", "comp"]

df.drop(columns='live', inplace=True)
df.hometeam.str.split(expand=True)
df[['hometeam', 'awayteam']] = df.hometeam.str.split(" vs ", expand=True)

df.to_csv('livesoccer.csv', index=False)

我得到的结果是这样的......

date time hometeam comp awayteam
16 Aug 21:15 Cerrito Primera Division Deportivo Maldonado
17 Aug 17:00 Cusco Primera Division Carlos Manucci

但我想获取比赛的 url 并从中提取国家名称,以在 CSV 文件中将两个联赛彼此区分开来,结果看起来像这样......

date time hometeam comp awayteam
16 Aug 21:15 Cerrito Primera Division Uruguay Deportivo Maldonado
17 Aug 17:00 Cusco Primera Division Peru Carlos Manucci

非常感谢任何帮助。

【问题讨论】:

  • 晚上好,我想看看能不能帮上忙。我将您的代码输入到笔记本中,但是出现以下错误 NameError: name 'channel' is not defined。应该为频道分配什么?
  • 啊,为了清楚起见,我将频道添加到 url,但忘记从代码中删除 +channel。我现在就编辑它。

标签: python pandas python-requests urllib python-re


【解决方案1】:

看起来你甚至不需要刮。看起来他们的网站依赖于使用此基本 URL https://proxy.livesoccertv.com/rss/livescores.json 的 API,因为 .json 可以是 .XML 或 .json,具体取决于您想要什么。然后添加查询 ?t=1629148365(当前 unix 时间)。所以基本上它应该是这样的:https://proxy.livesoccertv.com/rss/livescores.json?t=1629148365

【讨论】:

  • 非常有趣,在主站点上我没有看到任何关于 API 的内容。感谢您引起我的注意,可能会解决我所有的问题。 编辑经过进一步检查,这不是我所追求的,我正在寻找电视频道信息,而不是与个人匹配自己有关,并且需要国家名称来更好地识别哪个国家匹配来自。
  • @SpingoTakagi 您正在抓取的页面似乎有一些 javascript 轮询 URL proxy.livesoccertv.com/rss/livescores.xml 以更新您尝试抓取的选项卡,所以我将其更改为 JSON 并且它有效。这就是我找到API的方式。您也可以抓取 XML,但 JSON 肯定更容易。
  • 刚刚编辑了我的上一篇文章,但它仍然是非常有用的信息,非常感谢。
【解决方案2】:

我设法使用以下正则表达式解决了这个问题...

class ls:
  url = "https://www.livesoccertv.com/channels/goltv-play"
  page = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) 
  data = urllib.request.urlopen(page).read()
  html = data.decode('utf-8')
  links = re.findall(r'<td class="compcell_right" valign="[^"]*"><a href="[^"]*" class="[^"]*" title="[^"]*">[a-zA-Z]+ [a-zA-Z]+</a> </td>', html)

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2020-09-16
    • 2018-10-31
    • 1970-01-01
    • 2017-12-22
    • 2020-08-06
    • 2019-06-22
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多