Как автоматизировать очистку информационного блока Википедии и распечатать данные, используя python для любой вики-страницы? - PullRequest
0 голосов
/ 21 октября 2018

Моя задача - автоматизировать печать данных инфобокса Википедии. Например, я соскребаю страницу википедии Star Trek (https://en.wikipedia.org/wiki/Star_Trek), извлекаю раздел инфобокса с правой стороны и печатаю их строка на экране с использованием Python. Я специально хочу информационное окно. Пока я сделал это:

from bs4 import BeautifulSoup
import urllib.request
# specify the url
urlpage =  'https://en.wikipedia.org/wiki/Star_Trek'
# query the website and return the html to the variable 'page'
page = urllib.request.urlopen(urlpage)
# parse the html using beautiful soup and store in variable 'soup'
soup = BeautifulSoup(page, 'html.parser')
# find results within table
table = soup.find('table', attrs={'class': 'infobox vevent'})
results = table.find_all('tr')
print(type(results))
print('Number of results', len(results))
print(results)

Это дает мне все из информационного окна. Ниже показан фрагмент:

[<tr><th class="summary" colspan="2" style="text-align:center;font- 
size:125%;font-weight:bold;font-style: italic; background: lavender;"> 
<i>Star Trek</i></th></tr>, <tr><td colspan="2" style="text-align:center">
<a class="image" href="/wiki/File:Star_Trek_TOS_logo.svg"><img alt="Star 
Trek TOS logo.svg" data-file-height="132" data-file-width="560" height="59" 

Я хочу извлечь только данные и распечатать их на экране. Итак, что я хочу:

Created by  Gene Roddenberry
Original work   Star Trek: The Original Series
Print publications
Book(s) 
List of reference books
List of technical manuals
Novel(s)    List of novels
Comics  List of comics
Magazine(s) 
Star Trek: The Magazine
Star Trek Magazine 

И так до конца информационного блока. Так что в основном это способ печатикаждую строку данных инфобокса, чтобы я мог автоматизировать их для любой вики-страницы? (класс инфобокс-таблицы всех вики-страниц, как показано в коде, 'infobox vevent')

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Используя Beautifulsoup, вы должны переформатировать данные, как вы хотите.используйте fresult = [e.text for e in result] для получения каждого результата

Если вы хотите прочитать таблицу в формате html, вы можете попробовать подобный код, хотя он использует pandas.

import pandas
urlpage =  'https://en.wikipedia.org/wiki/Star_Trek'
data = pandas.read_html(urlpage)[0]
null = data.isnull()

for x in range(len(data)):
    first = data.iloc[x][0]
    second = data.iloc[x][1] if not null.iloc[x][1] else ""
    print(first,second,"\n")
0 голосов
/ 21 октября 2018

Эта страница должна помочь вам разобрать ваш html как простую строку без тегов html Использование BeautifulSoup Extract Text без тегов

Это код с этой страницы, он принадлежит @0605002

>>> html = """
<p>
    <strong class="offender">YOB:</strong> 1987<br />
    <strong class="offender">RACE:</strong> WHITE<br />
    <strong class="offender">GENDER:</strong> FEMALE<br />
    <strong class="offender">HEIGHT:</strong> 5'05''<br />
    <strong class="offender">WEIGHT:</strong> 118<br />
    <strong class="offender">EYE COLOR:</strong> GREEN<br />
    <strong class="offender">HAIR COLOR:</strong> BROWN<br />
</p>
"""
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(html)
>>> print soup.text


YOB: 1987
RACE: WHITE
GENDER: FEMALE
HEIGHT: 5'05''
WEIGHT: 118
EYE COLOR: GREEN
HAIR COLOR: BROWN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...