我正在尝试使用美丽的汤学习python中的网页抓取的基础知识。我在文档中遇到了代码。当我执行它时出错。代码是:
import urllib2
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(urllib2.urlopen('http://www.bcsfootball.org’).read())
for row in soup('table', {'class': 'mod-data’})[0].tbody('tr'):
tds = row('td')
print tds[0].string, tds[1].string
,错误是:
SyntaxError: Non-ASCII character '\xe2' in file ex.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
请帮我解决这个问题,并解释一下
for row in soup('table', {'class': 'mod-data’})[0].tbody('tr'):
大多数网站都提供示例代码,而不是解释它是如何产生的以及它是什么意思。它有点令人困惑,像class
,tbody
等术语。如果您可以推荐任何网站或电子书或任何其他内容,那将非常有用
答案 0 :(得分:3)
你在这一行有一个错字:
soup = BeautifulSoup(urllib2.urlopen('http://www.bcsfootball.org’).read())
<。>而不是.org之后的单引号你有一个撇号
应该是这样的:
soup = BeautifulSoup(urllib2.urlopen("http://www.bcsfootball.org").read())
同时强>
您在以下行中遇到同样的问题。在 mod-data 之后将撇号更改为引用
而不仅仅是soup('table', {'class': 'mod-data'})[0].tbody('tr')
# syntax error
尝试soup.find_all('table', {'class': 'mod-data'})[0].tbody('tr')
或 .findAll
..
你应该在这里使用一种方法,比如.find_all()
返回一个列表
阅读BeautifulSoup docs并获取BeautifulSoup的最新版本(4)
以下代码适用于我:
import urllib2
from bs4 import BeautifulSoup # latest version bs4
soup = BeautifulSoup(urllib2.urlopen("http://www.bcsfootball.org").read())
for row in soup.find_all("table", {"class": "mod-data"})[0].tbody("tr"):
tds = row("td")
print tds[0].string, tds[1].string
<强>输出:强>
1 Florida State
2 Auburn
3 Alabama
4 Michigan State
5 Stanford
6 Baylor
7 Ohio State
8 Missouri
9 South Carolina
10 Oregon
11 Oklahoma
12 Clemson
13 Oklahoma State
14 Arizona State
15 UCF
16 LSU
17 UCLA
18 Louisville
19 Wisconsin
20 Fresno State
21 Texas A&M;
22 Georgia
23 Northern Illinois
24 Duke
25 USC
如果您在这些行上使用单引号时遇到问题,请使用双引号。
答案 1 :(得分:1)
尝试更改第四行:
soup = BeautifulSoup(urllib2.urlopen('http://www.bcsfootball.org’).read())
要:
soup = BeautifulSoup(urllib2.urlopen("http://www.bcsfootball.org").read())
看起来您的第二个单引号与第一个单引号不同,因此更改为双引号可以缓解该错误。
您要问的代码是从表中读取。在HTML中,表的每一行都由标记表示,您的程序正在搜索该标记然后从中读取。然后,您将打印找到的表的第一列和第二列。
答案 2 :(得分:0)
尝试更改第二行:
来自bs4 import BeautifulSoup