如何解决使用 BeautifulSoup 抓取时如何解决加倍问题
这是脚本:
# import library
import json
import re
import requests
from bs4 import BeautifulSoup
import datetime
# Request to website and dowload HTML contents
url = 'https://www.coteur.com/cotes-basket.PHP'
#page = requests.get(url)
response = requests.get(url)
#soup = BeautifulSoup(page.text,'html.parser')
soup = BeautifulSoup(response.text,'html.parser')
s = soup.find("table",id="mediaTable").find_all('script',type='application/ld+json')
date_hour = [json.loads(re.search(r'>(.+)<',str(j),re.S).group(1))["startDate"] for j in s]
#print(date_hour)
date_hour = [sub.replace("T"," ") for sub in date_hour]
print(len(date_hour))
print(date_hour)
此代码有效。它返回标记脚本内的 startDate
元素。
但是有一个日期加倍(在网页中,我计算了 24 个篮子事件,但我的列表长度为 25)。在网页中,您可以看到 3 个从 00:00
开始的事件,但我的脚本使用 00:00
也许您知道为什么网站不显示这些额外的条目?
解决方法
也许你知道为什么网站不显示这些额外的 条目?
它不会显示没有赔率的地方。这是由于脚本运行并从视图中删除了那些没有赔率的情况。我认为目前这是由 script:nth-child(25)
标识的脚本,它以 $(document).on('click'
开头...。这对odds.length 进行了测试,如果为 0,则行删除。
您可以通过禁用 javascript 并重新加载页面来进行测试。您将获得与您的 python 请求相同的结果(其中 js 不运行)。该行存在。重新启用js,该行就会消失。
您可以通过转到 Recontres(主桌)查看给定比赛的赔率 > Cotes(另见预测)。如果您在禁用 js 的情况下执行此操作,您可以按照所有比赛的 Recontres 链接查看是否有赔率。在预测中,应该有基于赔率的计算,而不是两者都为 0。
如何解决用 BeautifulSoup 抓取时出现翻倍的问题?
无法根据您使用 requests
获得的响应来区分页面上将丢失的行。我不确定您甚至可以提出额外的请求来检查赔率信息,因为所有没有 js 的人都缺少它。您可能需要切换到 selenium/浏览器自动化。这样你就根本不需要 BeautifulSoup 了。
有很小的外部机会,您可能会发现 API/其他站点的可能性相同,并且您可以交叉引用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。