使用 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】:您的问题可能与编码有关。我认为bs4
与utf-8
一起使用,并且您的机器上默认设置了不同的编码(包含西班牙字母的编码)。所以 urllib 以您的默认编码请求页面,没关系,所以数据在源中,它甚至可以打印出来,但是当您将它传递给基于 bs4
的 utf-8
时,字符丢失了。尝试在bs4
中设置不同的编码,如果可能,将其设置为默认值。不过这只是猜测,请放心。
我建议使用regular expressions
。我已将它们用于我所有的网络爬虫。这是否对您有用取决于网站的动态性。但即使你使用bs4
,这个问题仍然存在。您只需手动编写所有re
并让它发挥作用。在查找所需信息时,您必须使用 bs4
类似的方式。
【讨论】:
以上是关于使用 Python 解析网页的搜索结果的主要内容,如果未能解决你的问题,请参考以下文章