Как получить только правильную информацию из проанализированных данных? - PullRequest
0 голосов
/ 23 апреля 2020

ребята! Недавно я начал исследовать сайты разбора в python, и через неделю я захотел разобрать Википедию. Я сделал это (это то, что у меня сейчас есть на примере вики-страницы о Пифагоре в двух словах):

{'start_info': 'Пифагор Самосский (др.-греч. Πυθαγόρας ὁ Σάμιος, лат. . \ xa0Пифагор, «пифийский вещатель» [2]; 570—490 гг. до \ xa0н. \ xa0э.) \ xa0— древнегреческий философ, математик и мистик, создатель религиозно-философской школы пифагорейцев. \ n '}

{'Биография': 'Историю жизни Пифагора ... Заключительный отрывок из «Золотых стихов» в переводе И. Петер: \ n '}

{' См. также ':' '}

{' Примечания ':' '}

{' Литература ':' '}

{'Источники и ссылки': ''} И, как вы видите, у меня есть одна проблема: есть некоторые нежелательные для меня элементы, такие как \ xa0 или [1], [2] и др. c. Я пытался заменить его, используя метод replace, но, возможно, .replays не работает со словарями, или, может быть, я такой тупой:

def treatment(data, errors): for data_ind in range(len(data)): for key, value in data[data_ind].items(): if r'\xa0' in value: data[data_ind][key].replace(r'\xa0', '') return data

Я тоже попытался найти решение этой проблемы на inte rnet, но я даже не могу назвать это. Если вы знаете, как я могу решить эту проблему, пожалуйста, помогите, я не могу записать свои данные в файл из-за этого и Я действительно устал! Спасибо! Вот мой код (я использовал bf4 и запросы):

import requests as req
import sys, codecs

users_topic = input("Введите тему: ")
URL = f"https://ru.wikipedia.org/wiki/{users_topic}"
HEADERS = {'User-agent': 'your bot 0.1'}



def get_html(url, params=None):
    request = req.get(url, headers=HEADERS, params=params)
    return request


def get_content(html):
    content_tree = bs(html, 'html.parser')
    info_from_wiki = [{'start_info': ''}]
    items = content_tree.find('div', class_='mw-parser-output')
    current_header_of_data = ''
    paragraph = 0
    # Main data finding
    for item in items:
        if item.name == 'h2':
            paragraph += 1
            current_header_of_data = item.get_text()
            info_from_wiki.append({
                f'{current_header_of_data}': ''
            })
        elif item.name == 'p':
            if len(info_from_wiki) == 1:
                text_data = item.get_text()
                info_from_wiki[paragraph]['start_info'] += text_data
            else:
                text_data = item.get_text()
                info_from_wiki[paragraph][current_header_of_data] += text_data
    for data in info_from_wiki:
        print(data)
    return info_from_wiki




def pars(url):
    html = get_html(url)
    if html.status_code == 200:
        return get_content(html.text)
    else:
        print('Smth goes wrong')

def treatment(data, errors):
    for data_ind in range(len(data)):
        for key, value in data[data_ind].items():
            if r'\xa0' in value:
                data[data_ind][key].replace(r'\xa0', '')
    return data

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