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

Posted

技术标签:

【中文标题】使用 Python 解析网页的搜索结果【英文标题】:Parsing Web Page's Search Results With Python 【发布时间】:2013-02-09 06:34:39 【问题描述】:

我最近开始在 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)

【问题讨论】:

你如何处理'soup'变量?您是如何确定信息丢失的? 如果我尝试打印 'soup' 变量的美化版本,它不包含我想要的信息。 我这里也测试过,没有发现任何信息丢失。特别是,当调用str(soup) 并搜索它时,我找到了您在上面粘贴的确切文本(编辑:soup.prettify() 相同)。也许您的问题在于您尝试检索该信息的方式,因此请在您使用soup 的地方发布代码。 你怎么知道你正在失去它?使用bs4,我没有丢失任何信息。 啊,我明白了。正在截断数据。比较:len(source) 与 len(str(soup))。这可能是编码问题。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于使用 Python 解析网页的搜索结果的主要内容,如果未能解决你的问题,请参考以下文章

解析生成的网页 Python Selenium

使用 Python 抓取和解析 Google 搜索结果

如何使用 bs4 正确解析谷歌搜索结果?

Python中的urlparseurllib抓取和解析网页

Python爬虫--初识爬虫

Python 开发轻量级爬虫06