我最近使用Python的BeautifulSoup库抓取了一堆元数据。我将该元数据中包含的所有 url 保存到一个.txt文件中。但是,我需要所有重定向网址。 我可以一次做一个网址:
def get_redirect_url(url):
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler)
request = opener.open(url)
return request.url
print get_redirect_url("www.foo.com")
print ""
我尝试将文本文件传递到列表中,然后将该列表作为参数传递,但出现以下错误:"TypeError:get_redirect_url() 恰好需要 1 个参数(给定 11 个)"
def get_redirect_url(url):
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler)
request = opener.open(url)
return request.url
with open ('openCRS_url.txt', 'r') as myFile:
data = [line.strip() for line in myFile]
print get_redirect_url(*data)
print ""
有没有办法将文本文件或该文本文件中数据的列表表示形式作为函数的参数传递,遍历该文件并提取所有重定向 URL? 谢谢大家。
我瘦弱你以错误的方式称呼get_redirect_url()
。
*
是"splat"运算符:它将列表作为输入,并将其扩展为函数调用中的实际位置参数。
所以,通过写get_redirect_url(*data)
你是在说get_redirect_url(url1, url2, url3, ..)
.但是,您的函数只接受一个参数:url。
总而言之,您必须一次只用一个参数调用get_redirect_url()
。
def get_redirect_url(url):
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler)
request = opener.open(url)
return request.url
with open ('openCRS_url.txt', 'r') as myFile:
urls = [line.strip() for line in myFile]
redirect_urls = [get_redirect_url(url) for url in urls]
print redirect_urls
# UNTESTED
def get_lots_of_urls(filename):
with open(filename) as infile:
return [get_redirect_url(url.strip()) for url in infile]
for redirect_url in get_lots_of_urls('input_file.txt'):
print redirct_url