Python - 从 ReactJS div 中抓取列表内容

标签 python reactjs beautifulsoup

我正在尝试从以下 URL 中抓取列表:https://www.oncomap.de/centers?selectedOrgan=Darm&selectedCounty=Deutschland
使用 Chrome 的开发者工具,我发现我感兴趣的内容在 body > app-root > app-top > div ... 里面.我尝试使用 Python 的 BeautifulSoup4 查找此内容包裹。不幸的是,无法深入了解 app-root 之外的结构。标签。我正在使用以下代码:
导入请求
从 bs4 导入 BeautifulSoup
进口打印品

标题 = {
'访问控制允许来源':'*',
'访问控制允许方法':'GET',
'访问控制允许标题':'内容类型',
'访问控制-最大年龄':'3600',
'用户代理': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
}

url = 'https://www.oncomap.de/centers?selectedOrgan=Darm&selectedCounty=Deutschland'
req = requests.get(url, headers)
汤 = BeautifulSoup(req.content, "html-parser")

mat_row = soup.select('body > app-root')

pp = pprint.PrettyPrinter()
对于 mat_row[0].descendants 中的 child :
pp.pprint( child )

此代码没有输出 - 没有后代(也尝试过 children )被打印。我想我在这里处理一个 ReactJS div。有人会提示如何处理此类内容吗?具体来说,我热衷于将页面上的主列表刮成 Python 可读的表格。感谢您的帮助!

最佳答案

数据通过 JavaScript 动态加载。但是你可以使用 requests加载数据的模块:

import json
import requests
from bs4 import BeautifulSoup


clinics_url = 'https://back.oncomap.de/api/direct/fulldb_clinics'
centers_url = 'https://back.oncomap.de/api/direct/fulldb_centers'

data1 = requests.get(clinics_url).json()
data2 = requests.get(centers_url).json()

clinics = {d['clinic_nr']:d for d in data1}

# uncomment this to print all data:
# print(json.dumps(data1, indent=4))
# print(json.dumps(data2, indent=4))

for c in data2:
    print(c['reg_nr'], c['inst1'], clinics.get(c['clinic_nr'], {}).get('inst1', '-'), c['url'], sep='\t')
打印:
AB-Z001 G   Brustzentrum Stuttgart am Marienhospital    Marienhospital Stuttgart    https://www.marienhospital-stuttgart.de/interdisziplinaere-zentren/brustzentrum/
FAB-Z007-1 G    Universitäts-Brustzentrum Tübingen  Universitätsklinikum Tübingen, CCC Tübingen-Stuttgart   www.uni-frauenklinik-tuebingen.de/brustzentrum.html
FAB-Z010 G  Interdisziplinäres Brustkrebszentrum der Charité (IBZ) im Charité Comprehensive Cancer Center   Charité - Campus Mitte  https://cccc.charite.de/leistungen/organbereiche/brustkrebs/
FAB-Z012-1 G    Kooperatives Brustzentrum Klinikum Region Hannover  KRH Klinikum Siloah www.krh.eu/klinikum/SOH/zentren/brustzentrum
FAB-Z016 G  Brustzentrum Robert-Bosch-Krankenhaus   Robert-Bosch-Krankenhaus; Klinik Schillerhöhe   http://www.rbk.de/disziplinen/interdisziplinaere-zentren/brustzentrum.html
FAB-Z017 G  Brustzentrum Halle des Universitätsklinikums Halle (Saale)  Universitäts-Klinikum Halle-Saale   www.unifrauenklinik-halle.de
FAB-Z020 G  Brustzentrum im Sana Klinikum Lichtenberg   Sana Klinikum Lichtenberg   http://www.sana-kl.de/unser-leistungsspektrum/kliniken-institute/brustzentrum-des-sana-klinikum-lichtenberg.html
FAB-Z021 G  Interdisziplinäres Brustzentrum der ALB FILS KLINIKEN   Klinik am Eichert Göppingen www.alb-fils-kliniken.de
FAB-Z022    Kooperatives Brustzentrum Landshut  Klinikum Landshut   www.klinikum-landshut.de
FAB-Z023 G  Brustzentrum Saar Mitte CaritasKlinikum Saarbrücken St. Theresia    www.caritasklinik.de
FAB-Z024 G  Brustzentrum am Universitätsklinikum Hamburg-Eppendorf  Universitätsklinikum Hamburg-Eppendorf  www.uke.de/kliniken-institute/zentren/brustzentrum/index.html
FAB-Z025-1  Südthüringer Brustzentrum Suhl / Meiningen  SRH Zentralklinikum Suhl    www.srh.de
FAB-Z026 G  Brustzentrum Klinikum Oldenburg Klinikum Oldenburg  www.klinikum-oldenburg.de

...and so on.

关于Python - 从 ReactJS div 中抓取列表内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62632749/

相关文章:

python - Mechanize :只关注 URL 中包含特定元素的链接

python - 如何检查 keras 是否使用 gpu 版本的 tensorflow?

css - 在 css 中实现表格的最简洁方法,哪一列没有明确的宽度(但包装内容),而其他列具有固定宽度?

css - React 中的 TailWindCSS 输入字段更改

javascript - 语法错误 : Unexpected token: punc ())

python - 我可以使用 BeautifulSoup 删除脚本标签吗?

python - 让 BeautifulSoup 像浏览器一样处理换行符

python - 引用列表中的某些值

python - 将元组列表转换为字典列表

python - Python 解释器 : Making your own programming language?