大家好我有这个项目正在使用python 3.4我想抓住livescore.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(最近一次调用最后一次): 文件“C:\ Users \ Bright \ Desktop \ live_score.py”,第12行,中 对于re.findall中的i(pattern,xml_data,re.DOTALL): 在findall中的文件“C:\ Python34 \ lib \ re.py”,第206行 return _compile(pattern,flags).findall(string) TypeError:不能在类字节对象上使用字符串模式
请大家帮帮我
答案 0 :(得分:3)
在你的第一个例子中 - 该网站正在通过大量的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。所以你只需要玩xpec_data到str。
这是修改后的代码:
for i in re.findall(pattern, str(xml_data), re.DOTALL):
result = re.split('<.+?>',i)
print (result[1], result[3]) # Print Score