2016-03-19 2 views
0

Я работаю над проектом, где я пытаюсь очистить данные с этой страницы Википедии, мне нужна колонка с годами (которая, как представляется, <th>) и четвертая колонка «Уолт Дисней Парки и Курорт».Не могу получить Web Scrape, чтобы очистить все необходимые данные

Код:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 

html = urlopen("https://en.wikipedia.org/wiki/The_Walt_Disney_Company#Revenues") 
bsObj = BeautifulSoup(html, "html.parser") 

t = open("scrape_project.txt", "w") 

year = bsObj.find("table", {"class":"wikitable"}).tr.next_sibling.next_sibling.th 
money = bsObj.find("table", {"class":"wikitable"}).td.next_sibling.next_sibling.next_sibling.next_sibling 

for year_data in year: 
    year.sup.clear() 
    print(year.get_text()) 

for revenue in money: 
    print(money.get_text()) 


t.close() 

Прямо сейчас, когда я запускаю его через терминал все, что печатает в 1991 (дважды) и 2794. Мне нужно, чтобы он печатал все годы и связанные с ними доходы от парков и курортов Уолта Диснея. Я также пытаюсь заставить его написать файл «scrape_project.tx»

Любая помощь будет оценена!

ответ

-1

Должен быть более чистый способ попасть туда, но это будет сделано.

from urllib.request import urlopen 
from bs4 import BeautifulSoup 

html = urlopen("https://en.wikipedia.org/wiki/The_Walt_Disney_Company#Revenues") 
soup = BeautifulSoup(html, "html.parser") 

table = soup.find("table", {"class":"wikitable"}) 

rows = [row for row in table.findAll("th", {"scope":"row"})] 

for each in rows: 
    string = each.text[:4] + ", $" + \ 
      each.next_sibling.next_sibling.next_sibling.next_sibling.next_sibling.next_sibling.text) 
0
from urllib.request import urlopen 
from bs4 import BeautifulSoup 

html = urlopen("https://en.wikipedia.org/wiki/The_Walt_Disney_Company#Revenues") 
soup = BeautifulSoup(html) 

t = open("scrape_project.txt", "w") 

table = soup.find('table', {"class": "wikitable"}) 

# get all rows, skipping first empty 
data = table.select("tr")[1:] 

# year data is in the scope attribute 
years = [td.select("th[scope]")[0].text[:4] for td in data] 

# Walt Disney Parks and Resort is the third element in each row 
rec = [td.select("td")[2].text for td in data] 

from pprint import pprint as pp 

pp(years) 
pp(rec) 

который даст вам данные:

['1991', 
'1992', 
'1993', 
'1994', 
'1995', 
'1996', 
'1997', 
'1998', 
'1999', 
'2000', 
'2001', 
'2002', 
'2003', 
'2004', 
'2005', 
'2006', 
'2007', 
'2008', 
'2009', 
'2010', 
'2011', 
'2012', 
'2013', 
'2014'] 
['2,794.0', 
'3,306', 
'3,440.7', 
'3,463.6', 
'3,959.8', 
'4,142[Rev 3]', 
'5,014', 
'5,532', 
'6,106', 
'6,803', 
'6,009', 
'6,691', 
'6,412', 
'7,750', 
'9,023', 
'9,925', 
'10,626', 
'11,504', 
'10,667', 
'10,761', 
'11,797', 
'12,920', 
'14,087', 
'15,099'] 

Я нарезанную пересмотр прочь с text[:4], если вы хотите сохранить информацию, то не порезать. Если вы хотите также удалить из денег удалить Rev т.е. 3 из '4,142[Rev 3]', вы можете использовать регулярные выражения:

import re 

m = re.compile("\d+,\d+") 

rec = [m.search(td.select("td")[2].text).group() for td in data] 

который даст вам:

['2,794', 
'3,306', 
'3,440', 
'3,463', 
'3,959', 
'4,142', 
'5,014', 
'5,532', 
'6,106', 
'6,803', 
'6,009', 
'6,691', 
'6,412', 
'7,750', 
'9,023', 
'9,925', 
'10,626', 
'11,504', 
'10,667', 
'10,761', 
'11,797', 
'12,920', 
'14,087', 
'15,099'] 
Смежные вопросы