2017-10-15 25 views
1

我有一个程序从文本文件读取一些URL,使用requests.get获取页面源,然后使用beautifulsoup4来查找一些信息。requests.get给出一个包含url的变量时返回400错误的URL,但是当给定一个具有相同url的字符串时,返回400错误的url

f = open('inputfile.txt') 
session = requests.Session() 
session.headers.update({'User-Agent': 'Mozilla/5.0'}) 
for line in f: 
    x = 0 
    z = len(line) 
    r = session.get(line[x:z]) 
    soup = bs4.BeautifulSoup(r.text, "html.parser") 

这将返回HTTP 400错误请求 - 无效的URL。但是,当我做同样的事情,除了输入URL作为字符串,一切正常(尽管我只有一个URL)。

f = open('inputfile.txt') 
session = requests.Session() 
session.headers.update({'User-Agent': 'Mozilla/5.0'}) 
for line in f: 
    r = session.get('http://www.ExactSameUrlAsEarlier.com') 
    soup = bs4.BeautifulSoup(r.text, "html.parser") 

我将如何修复/修改这个让我来循环多个网址我有文件吗?只是为了澄清,这是inputfile.txt的样子:

http://www.url1.com/something1 
http://www.url2.com/something2 

等提前

感谢。

+0

如果只有一个网址在''inputfile.txt''它仍然给你一个400?你也注销了'line [x:z]',只是为了确保它是一个有效的URL被取出? –

+0

是的,我记录了'line [x:z]'的输出,它返回一个有效的url。当我将'line [x:z]'包含的url直接粘贴到'requests.get()'语句中时,它就可以工作。我没有尝试在输入文件中只有一个网址,我会试着看看它是如何工作的 –

回答

0

您应该遍历文件中的行,而不是文件句柄。您的循环应该是:

for line in f.readlines(): 
    url = line.strip() 

有从线剥离空白的其他方式,来看看这篇文章:Getting rid of \n when using .readlines()

+0

太棒了,这工作。我的问题似乎是网址末尾有一个流浪的'\ n'。谢谢! –

相关问题