【问题标题】:Scraping #document from an iframe tag using beautifulsoup使用 beautifulsoup 从 iframe 标签中抓取 #document
【发布时间】:2021-02-09 09:55:27
【问题描述】:

我正在尝试使用 website 获取与 COVID 相关的数据。数据包含在iframe 标记中。我尝试使用beautifulsoup 抓取结果,但无法提取#document。这是我的方法

import requests
from bs4 import BeautifulSoup
with requests.Session() as s:
    coo = s.get("https://www.theguardian.com/", headers={'User-Agent': 'Mozilla/5.0'})
    cookies = dict(coo.cookies)
    url = "https://www.theguardian.com/world/2020/oct/25/covid-world-map-countries-most-coronavirus-cases-deaths"
    webpage = s.get(url, headers={'User-Agent': 'Mozilla/5.0'}, cookies = cookies)
    soup = BeautifulSoup(webpage.content, "html.parser")
    frame = soup.find("iframe", class_ = "interactive-atom-fence")
    print(frame)

我的结果:

检查来自网站的数据:

有人可以解释为什么我的结果中缺少#document 部分吗?

【问题讨论】:

  • 关闭您正在抓取的页面上的JS (JavaScript) 并亲自查看。 BeautifulSoup看到动态内容。因此你缺乏结果。

标签: python dom beautifulsoup python-requests screen-scraping


【解决方案1】:

不过,The Guardian 提供完整的 .csv 文件供您获取,如果您查看开发者工具中的情况。

以下是获取Covid19 Gloabal Deaths 数据的方法:

import shutil

import requests

url = "https://interactive.guim.co.uk/2020/coronavirus-jh-timeline-data/time_series_covid19_deaths_global.csv"
data = requests.get(url, stream=True)
if data.status_code == 200:
    with open("covid19_data.csv", 'wb') as f:
        data.raw.decode_content = True
        shutil.copyfileobj(data.raw, f)

如果您将URL 的最后一部分与time_series_covid19_confirmed_global.csv 交换,这就是您将作为.csv 文件返回的内容。

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多