【问题标题】:I can't to parse XML from Betfair site using python我无法使用 python 从 Betfair 网站解析 XML
【发布时间】:2019-04-28 07:39:12
【问题描述】:

我需要使用 python 从 betfair 网站获取一些数据 我需要一个链接: https://www.betfair.com/www/sports/exchange/readonly/v1/bymarket?_ak=nzIFcwyWhrlwYMrh&currencyCode=EUR&locale=ru&marketIds=1.158145690&rollupLimit=10&rollupModel=STAKE&types=MARKET_STATE,MARKET_RATES,MARKET_DESCRIPTION,EVENT,RUNNER_DESCRIPTION,RUNNER_STATE,RUNNER_EXCHANGE_PRICES_BEST,RUNNER_METADATA,MARKET_LICENCE

为了解决这个问题,我将打开的页面保存为 xml-document,并成功地用这段代码解析它

from bs4 import BeautifulSoup as bs

filedata = open('bymarket.xml')

cont = bs(filedata, 'lxml')

course = cont.find('venue')
print(course.text)
container = cont.find('runners')
item = container.find_all('runnernode')
for horse in item:
    runner = horse.find('runnername').text
    odds = horse.find('availabletolay').find('price').text
    print(runner, odds)

使用此代码,我可以获得所需的结果。 但是,当我尝试直接从页面获取这些数据时,什么也没有发生 - 没有找到任何物品,我没有找到。 请帮助非专业人士获取我需要的信息

【问题讨论】:

  • available to lay 可以有多个价格值 - 您只想要第一个吗?在您的示例中,Kibaar 为 4.9。您在跑步者节点中有多个跑步者。跑步者只能有 1 个子节点吗?
  • 是的。我需要第一个值

标签: xml python-3.x parsing web-scraping


【解决方案1】:

您需要在请求中添加Accept标头并指定xml解析器

 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

派:

import requests
from bs4 import BeautifulSoup as bs

headers = {
     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'User-Agent': 'Mozilla/5.0'
}
r = requests.get('https://www.betfair.com/www/sports/exchange/readonly/v1/bymarket?_ak=nzIFcwyWhrlwYMrh&currencyCode=EUR&locale=ru&marketIds=1.158145690&rollupLimit=10&rollupModel=STAKE&types=MARKET_STATE,MARKET_RATES,MARKET_DESCRIPTION,EVENT,RUNNER_DESCRIPTION,RUNNER_STATE,RUNNER_EXCHANGE_PRICES_BEST,RUNNER_METADATA,MARKET_LICENCE', headers = headers)
soup = bs(r.content, 'xml')
for horse in soup.select('RunnerNode'):
    name = horse.select_one('runnerName').text
    first_availableToLay_price_size =  horse.select_one('price').text
    print(name, first_availableToLay_price_size)

输出:

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2017-04-03
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多