2013-05-03 48 views
0

我需要您的帮助Pythonists:我抓取所有以“details.php?”开头的网址来自this page并忽略所有其他网址。从网页中刮去特定的网址,并将它们转换为绝对网址

然后,我需要将我刚刚刮到的每个网址都转换为绝对网址,所以我可以一个接一个地刮。绝对网址开头为:http://evenementen.uitslagen.nl/2013/marathonrotterdam/details.php ...

我尝试使用re.findall这样的:

html = scraperwiki.scrape(url) 
if html is not None: 
    endofurl = re.findall("details.php?(.*?)>", html) 

这让我一个名单,但我会被卡住。有人可以帮我吗?

回答

0

啊!我最喜欢的...列表解析!

base_url = 'http://evenementen.uitslagen.nl/2013/marathonrotterdam/{0}' 
urls = [base.format(x) for x in list_of_things_you_scraped] 

我不是一个正则表达式的天才,所以你可能需要用base_url摆弄,直到你完全正确。

0

如果你需要一个一个地完成最终的网址,那么你应该使用生成器而不是迭代器。

abs_url = "url data" 
urls = (abs_url+url for url in endofurl) 

如果你担心编码你可以使用urllib.urlencode的网址(URL)

3

您可以使用urlparse.urljoin()创建完整的URL:

>>> import urlparse 
>>> base_url = 'http://evenementen.uitslagen.nl/2013/marathonrotterdam/' 
>>> urlparse.urljoin(base_url, 'details.php?whatever') 
'http://evenementen.uitslagen.nl/2013/marathonrotterdam/details.php?whatever' 

您可以使用列表理解为你的所有网址做到这一点:

full_urls = [urlparse.urljoin(base_url, url) for url in endofurl] 
0

如果你想使用lxml.html解析html;有.make_links_absolute()

import lxml.html 

html = lxml.html.make_links_absolute(html, 
    base_href="http://evenementen.uitslagen.nl/2013/marathonrotterdam/")