Python - очистка веб-страниц. Опубликованный тезис. Требуется создать 2 переноса строк между разделами (разделенных заглавными буквами и ":"). - PullRequest
0 голосов
/ 18 мая 2019

Я хочу очистить тезисы от pubmed.gov и создать разрывы строк / абзацы между каждым разделом, чтобы не все было сжато. Разделы, как правило, пишутся заглавными буквами и заканчиваются двоеточием. Пример: ВВЕДЕНИЕ: или РЕЗЮМЕ: или МЕТОДЫ.

Я хочу проанализировать каждый раздел и создать 2 разрывов строк между каждым разделом.

Что я получаю сейчас: ВВЕДЕНИЕ: бла-бла-бла. Методы: мы провели эксперимент, чтобы сделать X. ВЫВОД: Это потрясающий эксперимент.

Желаемый вывод:

ВВЕДЕНИЕ: бла-бла-бла.

МЕТОДЫ: Мы провели эксперимент, чтобы сделать X.

ЗАКЛЮЧЕНИЕ: Это потрясающий эксперимент.

ВАЖНОЕ ПРИМЕЧАНИЕ: заголовки не всегда будут одинаковыми, но всегда будут все заглавные буквы, за которыми следует двоеточие. Так что я думаю, мне нужно выяснить, как использовать регулярные выражения, чтобы найти слово с заглавными буквами и двойным двоеточием и создать 2 переноса строк.

import pandas as pd
import requests
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
import datetime
import csv
import time

listofa_urls = ['https://www.ncbi.nlm.nih.gov/pubmed/30470520', 
'https://www.ncbi.nlm.nih.gov/pubmed/31063262','https://www.ncbi.nlm.nih.gov/pubmed/31067303']

for l in listofa_urls:
    response = requests.get(l)
    soup = BeautifulSoup(response.content, 'html.parser')
    x = soup.find(class_='abstr').get_text()
    #print(x.encode("utf-8"))
    x = re.sub(r"\babstract(.*?)", r"\1", x, flags=re.I)

    print(x.encode("utf-8"))
    print()

1 Ответ

1 голос
/ 18 мая 2019

Улучшен ваш код только для 3-х URL.

import requests
from bs4 import BeautifulSoup

listofa_urls = ['https://www.ncbi.nlm.nih.gov/pubmed/30470520',
'https://www.ncbi.nlm.nih.gov/pubmed/31063262','https://www.ncbi.nlm.nih.gov/pubmed/31067303']

for l in listofa_urls:
    response = requests.get(l)
    soup = BeautifulSoup(response.content, 'html.parser')
    div_ = soup.find(class_='abstr').find('div')
    if div_.find('h4'):
        h4_ = div_.find_all('h4')
        p_ = div_.find_all('p')
    else:
        h4_ = soup.find(class_='abstr').find_all('h3')
        p_ = soup.find(class_='abstr').find_all('p')

    mp = list(map(lambda x, y: [x.get_text(),y.get_text()], h4_, p_))

    print(mp)
    print()
...