【问题标题】:requests.get returns 400 bad url when given a variable containing a url, but not when given a string with the same urlrequests.get 在给定包含 url 的变量时返回 400 bad url,但在给定具有相同 url 的字符串时不返回
【发布时间】:2017-10-15 03:46:55
【问题描述】:

我有一个程序,它从文本文件中读取一些 URL,使用 requests.get 获取页面源,然后使用 beautifulsoup4 查找一些信息。

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")

我将如何修复/修改它以允许我循环浏览文件中的多个 URL?只是为了澄清,这就是 inputfile.txt 的样子:

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

等等。

提前致谢。

【问题讨论】:

  • 如果'inputfile.txt' 中只有一个 url,它还会给你一个 400 吗?您是否还注销了line[x:z],只是为了确保它是一个有效的网址被拉出?
  • 是的,我已经记录了line[x:z] 的输出,它返回了一个有效的 url。当我将line[x:z] 包含的网址直接复制粘贴到requests.get() 语句中时,它可以工作。我没有尝试在输入文件中只使用一个 url,我会尝试看看它是如何工作的

标签: python-3.x file url python-requests


【解决方案1】:

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

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

还有其他方法可以从行中去除空格,看看这篇文章:Getting rid of \n when using .readlines()

【讨论】:

  • 很好,这很有效。我的问题似乎是网址末尾有一个流浪的\n。谢谢!
猜你喜欢
  • 2021-08-20
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2017-06-16
  • 2019-02-24
  • 2017-09-02
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多