2

以下代码不返回单个非空 urlparse.netloc 或 urlparse.scheme。scheme 和 netloc 被附加到 path 组件中。请问我做错了什么?

#! /usr/bin/python
# -*- coding: UTF-8 -*-

from urllib import urlopen  
from urlparse import urlparse, urljoin 
import re   
link_exp = re.compile("href=(.+?)(?:'|\")", re.UNICODE)  

flux = urlopen("http://www.w3.org") 
links = [urlparse(x) for x in link_exp.findall(flux.read())]
for x in links : 
    print x

这会提取每个(?也许我的正则表达式是错误的)url,并打印它,除了“http://”总是在路径中,而不是在方案中。怎么会?当我完成解决这个问题时,我可能应该重新实现 urlparse 功能,因为这是一个课程练习,而不是真实世界的场景。很抱歉没有更清楚地说明这一点!

4

2 回答 2

2

你的正则表达式是错误的:

x = "<a href='http://www.bbcnews.com'>foo</a>"
link_exp.findall(x)
# ["'http://www.bbcnews.com"]

请注意,您包括开场白。

于 2013-01-31T18:16:02.747 回答
0

用这个:

link_exp = re.compile(r"href=\"(.+?)(?:'|\")", re.UNICODE)  

输出:

...
ParseResult(scheme='http', netloc='ev.buaa.edu.cn', path='/', params='', query='', fragment='')
...
于 2013-01-31T18:19:43.537 回答