使用lxml模块处理python中的小型Web蜘蛛我有一段代码,它对文档进行xpath查询,并将“a href”标记中的所有链接放入列表中。我想要做的是检查每个链接,因为它被添加到列表中,如果需要,请将其删除。我理解使用urllib.unquote()函数,但我遇到的问题是urllib方法抛出一个异常,我认为这是由于并非每个传递给该方法的链接都需要unescaping。谁能指出我正确的方向?这是我到目前为止的代码:
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)
答案 0 :(得分:1)
unquote
不会抛出异常。您没有向我们展示异常,但我猜测问题是old
不是字符串,可能是None
,因为您的<a>
标记没有href
属性。
在尝试使用之前检查old
的值。
答案 1 :(得分:0)
url.find('%') > -1
或将urllib.unquote
包裹在try
.. except
子句中。
答案 2 :(得分:0)
你可以这样做。虽然我没有导致例外的网址。所以这只是假设。看看这种方法是否有效。
from urllib import unquote
#get url from your parse tree.
url_unq = unquote(url or '')
if not url_unq:
url_unq = url
看看这是否有效?如果您能提供导致异常的URL的实际示例,那将是很好的。什么例外?你可以发布StackTrace吗?
最糟糕的情况是,你总是可以在该区块附近使用try-except
&amp;开展您的业务。