擅长:python、mysql、java
<p>最干净的方法是使用来自<code>lxml.html</code>和<code>urlparse</code>的<code>cssselect</code>。方法如下:</p>
<pre><code>from lxml import html
from urlparse import urlparse
doc = html.fromstring(html_data)
links = doc.cssselect("a")
domains = set([])
for link in links:
try: href=link.attrib['href']
except KeyError: continue
parsed=urlparse(href)
domains.add(parsed.netloc)
print domains
</code></pre>
<p>首先使用<code>fromstring</code>将html数据加载到a document对象中。您可以使用带有<code>cssselect</code>的标准css选择器查询文档中的链接。您可以遍历这些链接,使用<code>.attrib['href']</code>获取它们的url,如果它们没有任何链接(<code>except - continue</code>),则跳过它们。用<code>urlparse</code>将url解析为一个命名元组,并将域(<code>netloc</code>)放入一个集合中。喂!在</p>
<p>当你有好的在线库时,尽量避免使用正则表达式。它们很难维修。同时也不能进行html解析。在</p>
<p><strong>更新</strong>:
注释中的<code>href</code>过滤器建议非常有用,代码如下所示:</p>
^{pr2}$
<p>您不需要<code>try-catch</code>块,因为<code>href</code>过滤器确保只捕获其中具有<code>href</code>属性的锚。在</p>