用Python解析网页搜索结果
我最近开始用Python写一个程序,这个程序可以让用户轻松地变动任何动词。为了实现这个功能,我使用了urllib模块来打开对应的动词变位网页。比如,动词“beber”(喝)对应的网页是:
为了打开这个网页,我用以下的Python代码:
source = urllib.urlopen("http://wwww.spanishdict.com/conjugate/beber").read()
这个网页的内容里确实包含了我想要提取的信息。但是,当我用下面的方式创建一个BeautifulSoup对象时:
soup = BeautifulSoup(source)
我似乎失去了所有想要提取的信息。通常在创建BeautifulSoup对象时丢失的信息看起来像这样:
<tr>
<td class="verb-pronoun-row">
yo </td>
<td class="">
bebo </td>
<td class="">
bebí </td>
<td class="">
bebía </td>
<td class="">
bebería </td>
<td class="">
beberé </td>
</tr>
我到底哪里做错了呢?我对Python和网页解析都不是很专业,所以可能是个简单的问题。
这是我的完整代码(我用“++++++”来区分这两部分):
import urllib
from bs4 import BeautifulSoup
source = urllib.urlopen("http://www.spanishdict.com/conjugate/beber").read()
soup = BeautifulSoup(source)
print source
print "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
print str(soup)
2 个回答
1
我在写解析器的时候遇到过一些问题,使用bs(Beautiful Soup)时,有时候它找不到某些东西,而lxml却能找到,反之亦然,这通常是因为HTML代码有问题。建议你试试 lxml.html。
0
你的问题可能和编码有关。我觉得 bs4
是用 utf-8
编码的,而你电脑上的默认编码可能是其他的(比如包含西班牙字母的编码)。所以,当你用 urllib 请求网页时,它是按照你电脑的默认编码来请求的,这样数据在源代码中是存在的,打印出来也没问题,但当你把它传给基于 utf-8
的 bs4
时,那些字符就丢失了。你可以试着在 bs4
中设置不同的编码,如果可以的话,设置成你的默认编码。不过这只是我的猜测,别太紧张。
我建议使用 正则表达式
。我在所有的网页爬虫中都用过它。是否适合你使用,取决于网站的动态性。不过即使你用 bs4
时也会遇到这个问题。你只需要手动写好所有的 re
,让它发挥作用。当你想查找信息时,你也得用类似的方式来处理 bs4
。