python 如何从生活分数刮足球结果?

nukf8bse  于 2022-10-30  发布在  Python
关注(0)|答案(1)|浏览(138)

我有这个项目正在使用python 3.4。我想刮livescore.com的足球比分(结果),例如获得当天的所有比分(英格兰2-2挪威,法国2-1意大利等)。我正在建设它与python 3.4,windows 10 64位操作系统。
我已经尝试了两种方式这是代码:

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
n9vozmp4

n9vozmp41#

在你的第一个例子-网站是加载其内容的沉重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()函数给出了byte数据类型,“re”只接受字符串或unicode,所以你只需要将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

相关问题