0

我最近使用 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?谢谢你们。

4

2 回答 2

1

我觉得你打电话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
于 2013-10-02T18:46:32.543 回答
0
# 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
于 2013-10-02T18:37:43.940 回答