在登录一个网站后,我想收集它的链接。我使用这个函数(使用机械化库和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我不知道如何解决这个问题,甚至连它都可以解决。是否有任何方法强制函数附加,即使它会产生一个不工作和奇怪的结果为无值?
或者,我在链接中真正想要的是链接的结尾。例如,其中一个链接的html代码如下所示(我想要的是世界"lexik"):
<td class="center">
<a href="http://UnimportantPartOfLink/lexik>>lexik</a>
</td>因此,另一种方法是,如果机械化可以直接收集这个值,就可以绕过链接,而没有任何价值问题。
发布于 2013-12-01 18:05:57
另一种很好的方法,不需要尝试,除了阻止-
将hostname = urlparse.urlparse(url).hostname替换为
hostname = urlparse.urlparse(url).hostname or ''和类似的path = urlparse.urlparse(url).path
path = urlparse.urlparse(url).path or ''希望这能帮上忙!
发布于 2013-12-01 17:43:43
为什么不使用try/except块呢?
try:
mylinks.append("http://" + hostname + path)
except TypeError:
continue如果有一个错误,它将跳过附加和继续循环。
希望这能有所帮助!
https://stackoverflow.com/questions/20315010
复制相似问题