【问题标题】:Python: second url in list of urls returns NonePython:url列表中的第二个url返回无
【发布时间】:2019-02-02 13:53:39
【问题描述】:

我正在使用漂亮的汤来浏览网址列表。

假设我在一个名为卫星的数组中获得了一个 url 列表

from bs4 import BeautifulSoup as bs
import pandas as p
import numpy as np
import requests as r
import json

satellites = [
"https://solarsystem.nasa.gov/missions/insight/in-depth/",
"https://solarsystem.nasa.gov/missions/mars-cube-one/in-depth/",
"https://solarsystem.nasa.gov/missions/osiris-rex/in-depth/",
"https://solarsystem.nasa.gov/missions/exomars-trace-gas-orbiter/in-depth/",
"https://solarsystem.nasa.gov/missions/hayabusa-2/in-depth/"]

# Then my code starts with:

for sat in satellites:
    print(sat)
    page = r.get(sat)
    print("got page")
    soup = bs(page.content, "html.parser")
    print("got soup")

获取页面内容适用于第一个 url,但第二个返回 None 这给了我一个回溯 'None' 没有属性 'content'。

我换了第一个和第二个url,结果是一样的。所有的 url 都经过了有效测试。

在 url 上循环使用请求有问题吗?

【问题讨论】:

  • satellites 的值是多少,特别是产生错误的那个值? r 是什么?一般来说,请提供一个可重现的示例。
  • shortened:satellites = ["solarsystem.nasa.gov/missions/insight/in-depth", "solarsystem.nasa.gov/missions/mars-cube-one/in-depth", ] r 是请求模块。上述网址完美运行。但似乎在遍历列表时,请求的第二次尝试返回 None
  • 我尝试在浏览器中打开每个页面。它们不存在。确保您没有使用缓存的旧版本。
  • 似乎我评论中的链接在我粘贴时已更改。尝试在我的问题上复制粘贴 python 代码中的 url。如果我完全复制/粘贴它们,页面加载正确。
  • 我尝试添加一个配置以不让请求保持活动状态 s = r.session() s.config['keep_alive'] = False 但仍然不行

标签: python url web-scraping beautifulsoup


【解决方案1】:

因此,在查看 Requests 库文档后,我发现 Session() 可以在整个脚本中保持一个 Requests 会话处于活动状态。

试过了,效果很好。

所以

将请求导入为 r

s = r.Session()

卫星 = [...]

对于坐在卫星中: s.get(sat)

如果发生任何事情,上述内容不会返回 None。似乎直接使用 Requests.get('') 在某些平台上存在问题。我的当前是 Mac OS High Sierra。如果有人说他们没有问题在 linux 上,这可能与平台有关,但我无法推测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多