парсинг таблицы с BeautifulSoup и запись в текстовый файл - PullRequest
8 голосов
/ 08 февраля 2010

Мне нужны данные из таблицы в текстовом файле (output.txt) в следующем формате: data1; data2; data3; Data4; .....

Целкова подлахова площадь быта; 33м; Вытах; Ано; Надземное подлазие; Приземное подлазие; .....; Форма власти; Особа

Все в " одна строка ", разделитель - "; " (позже экспорт в csv-файл).

Я начинающий .. Помогите, спасибо.

from BeautifulSoup import BeautifulSoup
import urllib2
import codecs

response = urllib2.urlopen('http://www.reality.sk/zakazka/0747-003578/predaj/1-izb-byt/kosice-mestska-cast-sever-sladkovicova-kosice-sever/art-real-1-izb-byt-sladkovicova-ul-kosice-sever')
html = response.read()
soup = BeautifulSoup(html)

tabulka = soup.find("table", {"class" : "detail-char"})

for row in tabulka.findAll('tr'):
    col = row.findAll('td')
    prvy = col[0].string.strip()
    druhy = col[1].string.strip()
    record = ([prvy], [druhy])

fl = codecs.open('output.txt', 'wb', 'utf8')
for rec in record:
    line = ''
    for val in rec:
        line += val + u';'
    fl.write(line + u'\r\n')
fl.close()

Ответы [ 2 ]

13 голосов
/ 09 февраля 2010

Вы не сохраняете каждую запись в том виде, в каком вы ее читаете. Попробуйте это, которая хранит записи в records:

from BeautifulSoup import BeautifulSoup
import urllib2
import codecs

response = urllib2.urlopen('http://www.reality.sk/zakazka/0747-003578/predaj/1-izb-byt/kosice-mestska-cast-sever-sladkovicova-kosice-sever/art-real-1-izb-byt-sladkovicova-ul-kosice-sever')
html = response.read()
soup = BeautifulSoup(html)

tabulka = soup.find("table", {"class" : "detail-char"})

records = [] # store all of the records in this list
for row in tabulka.findAll('tr'):
    col = row.findAll('td')
    prvy = col[0].string.strip()
    druhy = col[1].string.strip()
    record = '%s;%s' % (prvy, druhy) # store the record with a ';' between prvy and druhy
    records.append(record)

fl = codecs.open('output.txt', 'wb', 'utf8')
line = ';'.join(records)
fl.write(line + u'\r\n')
fl.close()

Это может быть убрано больше, но я думаю, что это то, что вы хотите.

0 голосов
/ 09 февраля 2010

вот альтернативный способ не BS, просто для вашей задачи

store=[] #to store your results
url="""http://www.reality.sk/zakazka/0747-003578/predaj/1-izb-byt/kosice-mestska-cast-sever-sladkovicova-kosice-sever/art-real-1-izb-byt-sladkovicova-ul-kosice-sever"""
page=urllib2.urlopen(url)
data=page.read()
for table in data.split("</table>"):
    if "<table" in table and 'class="detail-char' in table:
         for item in table.split("</td>"):
              if "<td" in item:
                  store.append(item.split(">")[-1].strip())
print ','.join(store)

выход

$ ./python.py
Celková podlahová plocha bytu,33 m2,Výťah,Áno,Nadzemné podlažie,Prízemné podlažie,Stav,Čiastočná rekonštrukcia,Konštrukcia bytu,tehlová,Forma vlastníctva,osobné
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...