Сложно ... Я думаю, это невозможно поцарапать эту веб-страницу - PullRequest
0 голосов
/ 19 сентября 2019

Поэтому я пытаюсь почистить эту страницу: https://icd.who.int/browse10/2016/en

Проблема в том, что содержимое страницы, которую я пытаюсь почистить, не может быть найдено в источнике страницы.

Например, я пытаюсь почистить меню в левой части страницы в разделе «ICD-10 Version: 2016»> «I Некоторые инфекционные и паразитарные заболевания»> A00-A09 Кишечные инфекционные заболевания.(

A00 Холера

A01 Брюшной тиф и паратифы

A02 Другие инфекции сальмонеллы

..)

Проблема заключается в том, что всеОб этом по какой-то причине нельзя найти на странице источника.поэтому, когда я его очищаю, я вообще не получаю эти данные.

from bs4 import BeautifulSoup
import requests
import pandas as pd
from pandas import Series, DataFrame

url = 'https://icd.who.int/browse10/2016/en'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36'}
result = requests.get(url, headers=headers)

c=result.content
soup = BeautifulSoup(c, 'html5lib')

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Пожалуйста, рассмотрите возможность использования официальных API

https://icd.who.int/icdapi/docs/APIDoc-Version2.html

и некоторые дополнительные сведения о конечных точках открытого API-интерфейса

https://id.who.int/swagger/index.html

Конечные точки дляПолучение информации о категории ICD10 приведено в ссылке выше.Например,

GET /icd/release/10

Список доступных выпусков ICD-10

GET /icd/release/10/{releaseId}

Эта конечная точка возвращает основную информацию о выпущенной версии ICD-10 вместе с главами в ней

GET /icd/release/10/{code}

Перечисляет доступные выпуски ICD-10 для запрошенной категории

GET /icd/release/10/{releaseId}/{code}

Эта конечная точка возвращает информацию о категории вместе с ее дочерними категориями

NB, на которые распространяется действие ICD10 и 11.Доступ к ним можно получить через GET, используя requests.Зарегистрируйтесь для доступа здесь .

Примечание некоторые преимущества в списке:

  1. Попытка API С этого чванствующего URL можнопопробуйте API, отправив запросы, и проследите за ответами
  2. Автоматическая генерация клиентского кода. Существует несколько бесплатных программ с открытым исходным кодом, которые могут генерировать код клиента на различных языках программирования с использованием документации Open API.Это значительно упростит использование наших API на выбранном вами языке программирования.
0 голосов
/ 19 сентября 2019

Это не невозможно, просто сложнее, потому что данные загружаются асинхронно (как сказал @Carcigenicate в комментариях).На сервер поступает запрос на загрузку данных, и его можно увидеть на вкладке «Сеть» инструментов разработчика в Google Chrome.Метод, который я использую, занимает некоторое время (из-за всех запросов), но он работает.

import requests

chapter_url = 'https://icd.who.int/browse10/2016/en/JsonGetRootConcepts?useHtml=false'
chapters = requests.get(chapter_url).json()
chapter_IDS = [chapter['ID'] for chapter in chapters]

inner_section_names = []
section_url = 'https://icd.who.int/browse10/2016/en/JsonGetChildrenConcepts?ConceptId={}&useHtml=false'
for ID in chapter_IDS:
    sections = requests.get(section_url.format(ID)).json()
    section_IDS = [section['ID'] for section in sections]

    for inner_ID in section_IDS:
        inner_sections = requests.get(section_url.format(inner_ID)).json()
        temp = [inner_section['label'] for inner_section in inner_sections]
        inner_section_names.extend(temp)

print(inner_section_names)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...