0

我需要 Pythonists 的帮助:我正在抓取所有以“details.php”开头的 url?从此页面并忽略所有其他网址。

然后我需要将我刚刚抓取的每个 url 转换为绝对 url,这样我就可以一个一个地抓取它们。绝对网址以: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

4 回答 4

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]
于 2013-05-03T19:38:54.343 回答
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/")
于 2013-05-03T20:02:39.157 回答
0

啊! 我最喜欢的...列表推导!

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

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

于 2013-05-03T19:30:14.120 回答
0

如果您需要一个一个最终的 url 并完成它们,您应该使用生成器而不是迭代器。

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

如果您担心对 url 进行编码,可以使用 urllib.urlencode(url)

于 2013-05-03T19:34:58.310 回答