BeautifulSoup解析返回空s

2024-10-02 18:14:36 发布

您现在位置:Python中文网/ 问答频道 /正文

更新代码就在下面)

我有一个类:UrlData,它生成一个url列表:

for url in urls:
    rawMechSiteInfo = mech.open(url)  #mechanize browse each url
    mech_response = mech.response()
    headers = mech_response.info()
    print "headers ", headers.getheader('Content-Type').encode('utf-8')
return

此行:print "headers ", headers.getheader('Content-Type').encode('utf-8')

不输出任何内容

如果我在我的view中做一个print url_data.url_list(),它的抛出:

^{pr2}$

我只是试图解析html标记的src,如下所示:

<div class="s">
   <div>
      <div class="f kv" style="white-space:nowrap">
         <cite class="vurls">www.somewebsite.com/</cite>‎
      </div>
   </div>
</div>

以下在分析整个文档时起作用

HarvestLinks = 'h3',attrs={'class': 'r'}

或者

HarvestLinks = BSObjOfUrl.find('cite','vurls')

它似乎工作得很好,但最后一个只返回一个结果,并且存在多个结果。在

感谢那些到目前为止一直在努力帮助的人,还有什么进一步的想法吗?在


Tags: divurlresponsetypecontentutfclassencode
3条回答

我以前从未使用过mechanize,我一直在使用urllib2和beautifulsoup4。 我多次遇到编码和解码问题。也许我的一些经验会有所帮助。在

当您从页面elem.text读取文本时,默认值始终是unicode。有时人们会有好运直接在屏幕上打印unicode,一切都很好。有时,控制台无法正确显示unicode。它表示两件事:

  1. 您已经在中准备好了数据,唯一的问题是您希望在IDE中看到它(Eclipse、Pycharm等等),它将无法工作。您可以不做任何事情就将unicode写入数据库或文件,有时当您看到IDE外部的数据时,它会正确显示。

  2. 如果您想在编写代码时先看到文本(谁不想呢?)你可以print elem.text.encode('utf-8'),我一直很幸运。

检查headers变量的输出并返回报告,您似乎仍然有错误的编码:

def url_list(self):
    #setup mechanize
    ###
    ### Mechanize settings are here.
    ###

    for url in urls:
        rawMechSiteInfo = mech.open(url)  #mechanize browse each url
        mech_response = mech.response()
        headers = mech_response.info()
        print "headers ", headers.getheader('Content-Type')
        #results = unicode(mech_response.read()) 
        #BSObjOfUrl = BeautifulSoup(results)
        #HarvestLinks = BSObjOfUrl.find_all(u'cite', class_='vurls')
    #return HarvestLinks
    return

看看文档,attrs是一个设计糟糕的参数,应该更像是一个**kwargs。在

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class表示实际要传递类\kwarg:

>>> from bs4 import BeautifulSoup
>>> src = """ <div class="s">
...    <div>
...       <div class="f kv" style="white-space:nowrap">
...          <cite class="vurls">www.somewebsite.com/</cite>\U+200E
...       </div>
...    </div>
... </div>
...
... """
>>> soup = BeautifulSoup(src)
>>> soup.find_all('cite')
[<cite class="vurls">www.somewebsite.com/</cite>]
>>> soup.find_all('cite', attr={'class': 'vurls'})
[]
>>> soup.find_all('cite', class_='vurls')
[<cite class="vurls">www.somewebsite.com/</cite>]

相关问题 更多 >