用Python解析网页搜索结果

4 投票
2 回答
1109 浏览
提问于 2025-04-17 16:53

我最近开始用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和网页解析都不是很专业,所以可能是个简单的问题。

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

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-8bs4 时,那些字符就丢失了。你可以试着在 bs4 中设置不同的编码,如果可以的话,设置成你的默认编码。不过这只是我的猜测,别太紧张。

我建议使用 正则表达式。我在所有的网页爬虫中都用过它。是否适合你使用,取决于网站的动态性。不过即使你用 bs4 时也会遇到这个问题。你只需要手动写好所有的 re,让它发挥作用。当你想查找信息时,你也得用类似的方式来处理 bs4

撰写回答