0

更新代码就在下面)

我有一个类: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')

什么都不输出

如果我print url_data.url_list()在我的 中做 a view,它的投掷:

<Scan.urldata.UrlData object at 0x103e73f50>

我只是试图解析html标记的 aa 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')

它似乎工作正常,但最后一个只返回一个结果并且有多个.

感谢那些迄今为止试图提供帮助的人,还有什么进一步的想法吗?

4

3 回答 3

1

检查 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
于 2013-11-02T11:53:47.163 回答
0

查看文档,attrs 是一个设计不佳的论点,应该更像是一个 **kwargs。

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class表示你确实想通过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>]
于 2013-11-01T23:46:50.057 回答
0

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

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

  1. 您已经准备好数据,唯一的问题是您想在 IDE(Eclipse、Pycharm、..etc)中看到它。它不起作用。您可以在不执行任何操作的情况下将 unicode 写入数据库或文件,有时当您在 IDE 之外看到数据时,它会正确显示。

  2. 如果您想在编写代码时首先看到文本(谁不想?)print elem.text.encode('utf-8')我总是很幸运。

于 2013-11-03T16:42:18.100 回答