4

我最近开始在 python 中开发一个程序,它允许用户轻松地结合任何动词。为此,我使用 urllib 模块打开相应的共轭网页。例如,动词“beber”会有网页:

http://www.spanishdict.com/conjugate/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 或 Web Parsing 的专业人士,所以这可能是一个简单的问题。

这是我的完整代码(我使用“++++++”来区分两者):

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)
4

2 回答 2

1

当我编写解析器时,我遇到了 bs 的问题,在某些情况下,由于 html 损坏,它没有发现找到 lxml,反之亦然。尝试使用lxml.html

于 2013-02-24T12:50:52.187 回答
0

您的问题可能与编码有关。我认为这bs4适用,utf-8并且您的机器上默认设置了不同的编码(包含西班牙字母的编码)。所以 urllib 以您的默认编码请求页面,没关系,所以数据在源中,它甚至可以打印出来,但是当您将它传递给utf-8基础时bs4,字符会丢失。尝试寻找设置不同的编码bs4,如果可能,将其设置为默认值。不过这只是猜测,请放心。

我建议使用regular expressions. 我已经将它们用于我所有的网络爬虫。这是否对您有用取决于网站的动态性。但是,即使您使用bs4. 您只需re手动编写所有内容,然后让它发挥作用。bs4在查找所需信息时,您必须使用类似的方式。

于 2013-03-02T21:35:10.897 回答