我需要你的帮助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)
这给我一个清单,但后来我卡住了。有人可以帮帮我吗?
答案 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/")