Python - 如何遍历url的文本文件并将所有url传递给重定向处理程序

时间:2013-10-02 15:13:15

标签: python

我最近使用Python的BeautifulSoup Library抓取了一堆元数据。我将该元数据中包含的所有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?谢谢大家。

2 个答案:

答案 0 :(得分:1)

我让你变瘦了,以错误的方式打电话给get_redirect_url()

*是" splat" operator:它将一个列表作为输入,并将其扩展为函数调用中的实际位置参数。

因此,通过撰写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

答案 1 :(得分: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