如何在python中以编程方式检查url是否需要清除?

2024-10-05 12:26:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中使用一个小的webspider,使用lxml模块,我有一段代码对文档进行xpath查询,并将来自'a href'标记的所有链接放入一个列表中。我想做的是检查每个链接,因为它被添加到列表中,如果需要,取消它的景观。我理解使用urllib.unquote()函数,但我遇到的问题是urllib方法抛出了一个异常,我认为这是由于传递给该方法的每个链接都不需要回避。谁能给我指出正确的方向吗?以下是我目前掌握的代码:

import urllib
import urllib2
from lxml.html import parse, tostring

class Crawler():

    def __init__(self, url):
        self.url = url
        self.links = []
    def crawl(self):

        doc = parse("http://" + self.url).getroot()
        doc.make_links_absolute(self.url, resolve_base_href=True)
        for tag in doc.xpath("//a"):
            old = tag.get('href')
            fixed = urllib.unquote(old)
            self.links.append(fixed)
        print(self.links)

Tags: 方法代码importselfurl列表docparse
3条回答

unquote不引发异常,因为URL不需要转义。您没有向我们展示异常,但我猜问题是old不是字符串,可能是None,因为您有一个没有href属性的<a>标记。在

在尝试使用old之前,请检查它的值。在

你可以这样做。虽然我没有导致异常的url。所以这只是假设。看看这个方法是否有效。在

from urllib import unquote

#get url from your parse tree.
url_unq = unquote(url or '')
if not url_unq:
    url_unq = url

看看这个行不行?如果你能给出一个导致异常的URL的实际例子,那就太好了。什么例外?你能把这张纸贴出来吗?在

最坏的情况下,你总是可以用一个try-except绕过这个街区,继续你的生意。在

url.find('%') > -1

或者在try..except子句中包装urllib.unquote。在

相关问题 更多 >

    热门问题