登录网站后,我想收集其链接。我使用这个函数(使用mechanize和urlparse库):
br = mechanize.Browser()
.
. #logging in on website
.
for link in br.links():
url = urlparse.urljoin(link.base_url, link.url)
hostname = urlparse.urlparse(url).hostname
path = urlparse.urlparse(url).path
#print hostname #by printing this I found it to be the source of the None value
mylinks.append("http://" + hostname + path)
我收到此错误消息:
mylinks.append("http://" + hostname + path)
TypeError: cannot concatenate 'str' and 'NoneType' objects
我不确定如何解决这个问题,或者即使它可以修复。有没有办法强制函数追加,即使它会为None值产生一个非工作和奇怪的结果?
或者,我在链接中真正关注的是链接的结尾。例如,其中一个链接的html代码看起来像这样(我所追求的是世界“lexik”):
<td class="center">
<a href="http://UnimportantPartOfLink/lexik>>lexik</a>
</td>
所以另一种方法是机械化可以直接收集这个值,绕过链接而无值麻烦
答案 0 :(得分:5)
没有任何尝试的另一个好方法,除了块 -
将hostname = urlparse.urlparse(url).hostname
替换为
hostname = urlparse.urlparse(url).hostname or ''
和类似路径= urlparse.urlparse(url).path
path = urlparse.urlparse(url).path or ''
希望这有帮助!
答案 1 :(得分:4)
为什么不使用try/except
块?
try:
mylinks.append("http://" + hostname + path)
except TypeError:
continue
如果出现错误,它将跳过附加并继续循环。
希望这有帮助!