6

登录网站后,我想收集其链接。这是我用这个函数做的(使用 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>

所以另一种方法是,如果 mechanize 可以直接收集这个值,绕过链接和 None 值的麻烦

4

2 回答 2

6

另一个没有任何尝试的好方法,除了块 -

替换hostname = urlparse.urlparse(url).hostname

hostname = urlparse.urlparse(url).hostname or ''

同样 path = urlparse.urlparse(url).pathwith

path = urlparse.urlparse(url).path or ''

希望这可以帮助 !

于 2013-12-01T18:05:57.333 回答
4

为什么不使用try/except块?

try:
    mylinks.append("http://" + hostname + path)
except TypeError:
    continue

如果有错误,它将跳过附加并继续循环。

希望这可以帮助!

于 2013-12-01T17:43:43.923 回答