【问题标题】:How to scrape football results from livescores?如何从实时比分中提取足球结果?
【发布时间】:2018-02-13 04:06:15
【问题描述】:

我有这个项目正在使用 python 3.4。我想在 livecore.com 上获取足球比分(结果),例如获取当天的所有比分(英格兰 2-2 挪威、法国 2-1 意大利等)。我正在使用 python 3.4、windows 10 64bit os 构建它。

我尝试了两种方法,这是代码:

import bs4 as bs
import urllib.request

sauce = urllib.request.urlopen('http://www.livescore.com/').read()
soup = bs.BeautifulSoup(sauce,'lxml')

for div in soup.find_all('div', class_='container'):
    print(div.text)

当我运行这段代码时,一只盒子小狗会说:

IDLE 的子进程没有建立连接。 IDLE 无法启动子进程或防火墙软件阻止了连接。

我决定再写一个这是代码:

# Import Modules
import urllib.request
import re

# Downloading Live Score XML Code From Website and reading also
xml_data = urllib.request.urlopen('http://static.cricinfo.com/rss/livescores.xml').read()

# Pattern For Searching Score and link
pattern = "<item>(.*?)</item>"

# Finding Matches
for i in re.findall(pattern, xml_data, re.DOTALL):
    result = re.split('<.+?>',i)
    print (result[1], result[3]) # Print Score

我得到了这个错误:

Traceback (most recent call last):
  File "C:\Users\Bright\Desktop\live_score.py", line 12, in <module>
   for i in re.findall(pattern, xml_data, re.DOTALL):
  File "C:\Python34\lib\re.py", line 206, in findall
    return _compile(pattern, flags).findall(string)
TypeError: can't use a string pattern on a bytes-like object

【问题讨论】:

    标签: python web-scraping beautifulsoup python-3.4 urllib


    【解决方案1】:

    在您的第一个示例中 - 该网站正在通过大量 javascript 加载其内容,因此我建议使用 selenium 来获取源代码。

    您的代码应如下所示:

    import bs4 as bs
    from selenium import webdriver
    
    url = 'http://www.livescore.com/'
    browser = webdriver.Chrome()
    browser.get(url)
    sauce = browser.page_source
    browser.quit()
    soup = bs.BeautifulSoup(sauce,'lxml')
    
    for div in soup.find('div', attrs={'data-type': 'container'}).find_all('div'):
        print(div.text)
    

    对于第二个示例,它的正则表达式引擎返回错误,因为您的请求中的 read() 函数提供了字节数据类型,“re”仅接受字符串或 unicode。所以你只是没有 toypecast xml_data 到 str。

    这是修改后的代码:

    for i in re.findall(pattern, str(xml_data), re.DOTALL):
        result = re.split('<.+?>',i)
        print (result[1], result[3]) # Print Score
    

    【讨论】:

    • 嗨@Chad 我上传了我在使用 chrome 检查元素时要抓取的页面的屏幕截图,并根据 div 的目标位置用颜色标记了 Div 标签和网站布局帮助我并查看代码(第一个代码)谢谢
    • 嗨!我编辑了我的答案,请看一下。如果您需要澄清,请告诉我。如果这解决了您的问题,请将其标记为答案。谢谢!
    • 嗨@Chad,我上传了运行您添加的代码时出现的错误图片,第一个代码,请给我您的 Facebook 信息,以便我添加,这是我的 brightgodwin47@yahoo.com谢谢
    • 1. pip install chromedriver 2. 更新代码:browser = webdriver.Chrome(executable_path=r'C:\Python34\chromedriver-Windows')
    • 请我使用硒,我需要先打开页面才能使用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多