从页面中截取特定网址并将其转换为绝对网址

时间:2013-05-03 19:18:46

标签: python url scrape

我需要你的帮助Python教徒:我正在抓取所有以“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) 

这给我一个清单,但后来我卡住了。有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:3)

您可以使用urlparse.urljoin()创建完整网址:

>>> 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]

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

如果您需要逐个完成最终URL并完成它们,则应使用生成器而不是迭代器。

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

如果您担心编码网址,可以使用urllib.urlencode(网址)

答案 3 :(得分: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/")