(更新后的代码在此下方)
我有一个班级:UrlData
,它会生成一个网址列表:
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()
中执行了view
,则会抛出:
<Scan.urldata.UrlData object at 0x103e73f50>
我只是想解析一个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')
它似乎工作正常,但最后只返回一个结果,并且有多个。
感谢那些到目前为止试图提供帮助的人,还有任何进一步的想法吗?
答案 0 :(得分: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
答案 1 :(得分: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>]
答案 2 :(得分:0)
我之前从未使用过mechanize
,而且我一直在使用urllib2和beautifulsoup4。
我多次遇到编码和解码问题。也许我的一些经验会有所帮助。
当您从页面elem.text
读取文本时,默认值始终为unicode。有时人们有好运直接将unicode打印到屏幕上,一切都很好。有时,控制台无法正确显示unicode。这表明了两件事:
您已经准备好了数据,唯一的问题是您希望在IDE(Eclipse,Pycharm,..等)中看到它。它不起作用。您可以将unicode写入数据库或文件而无需执行任何操作,有时当您在IDE外部看到数据时,它将正确显示。
如果你想在编写代码时首先看到文本(谁没有?)你可以print elem.text.encode('utf-8')
我总是好运。