使用Python解析网页的搜索结果

时间:2013-02-23 19:20:16

标签: python parsing web beautifulsoup urllib

我最近开始研究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解析,所以这可能是一个简单的问题。

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

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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

我建议使用regular expressions。我已将它们用于我的所有网络抓取工具。如果这对您有用,取决于网站的动态性。但即使您使用bs4,问题仍然存在。你只需手动编写所有re并让它发挥魔力。在查找您想要的信息时,您必须使用bs4类似的方式。