Извлечение текстовых полей из HTML с использованием Python? - PullRequest
0 голосов
/ 11 октября 2009

Каков наилучший способ извлечь данные из этого файла HTML и поместить их в базу данных MySQL с номером телефона компании, названием компании и адресом электронной почты с первичным ключом в качестве номера телефона?

</tr><tr class="tableRowOdd">
                <td>"JSC company inc. 00" &lt;email@email.com&gt;</td>
                <td>1231231234</td>
            </tr><tr class="tableRowEven">
                <td>"JSC company inc. 01" &lt;email01@email.com&gt;</td>
                <td>234234234234234</td>
            </tr><tr class="tableRowOdd">
                <td>"JSC company inc. 02" &lt;email2@email.com&gt;</td>
                <td>32423234234</td>
            </tr><tr class="tableRowEven">
                <td>"JSC company inc. 03" &lt;email3@email.com&gt;</td>
                <td>23423424324</td>
            </tr><tr class="tableRowOdd">
                <td>"JSC company inc. 04" &lt;email4@email.com&gt;</td>
                <td>234234232324244</td>
            </tr>   <tr>

Ответы [ 5 ]

6 голосов
/ 11 октября 2009

Для извлечения и общего просмотра HTML смотрите

http://www.crummy.com/software/BeautifulSoup/

Для MySQL я предлагаю прибегнуть к помощи: учебник по MySQL python

1 голос
/ 12 октября 2009

С lxml вы можете сделать это почти так же легко, как с jQuery.

from lxml import html

doc = html.parse('test.html').getroot()
for row in doc.cssselect('tr'):
    name, phone_number = row.cssselect('td')[:2]
    print name.text_content()
    print phone_number.text_content()
1 голос
/ 12 октября 2009

Для разбора я определенно рекомендую также Красивый суп .

Чтобы поместить текст в базу данных, я рекомендую хороший Python ORM. Мое главное предложение - использовать ORM из Django , если можете. С Django вы получаете не только ORM, но и веб-интерфейс, который позволяет просматривать вашу базу данных с помощью веб-браузера; Вы даже можете вводить данные в базу данных с помощью веб-браузера.

Если вы не можете использовать Django, я рекомендую SQLAlchemy .

Удачи.

1 голос
/ 11 октября 2009

Вот как вы получаете td содержимое в список Python, используя BeautifulSoup:

#!/usr/bin/python
from BeautifulSoup import BeautifulSoup, SoupStrainer

def find_rows(data):
    table_rows = SoupStrainer('tr')
    rows = [tag for tag in BeautifulSoup(data, parseOnlyThese=table_rows)]
    return rows

def cell_data(row):
    cells = [tag.string for tag in row.contents]
    return cells

if __name__ == "__main__":
    f = open("testdata.html", "r")
    data = f.read()
    rows = find_rows(data)
    for row in rows:
        print cell_data(row)

Сохраните html-файл как testdata.html и запустите этот скрипт из той же директории. С данными, которые вы разместили здесь, вывод

[u'\n', u'"JSC company inc. 00" &lt;email@email.com&gt;', u'\n', u'1231231234', u'\n']
[u'\n', u'"JSC company inc. 01" &lt;email01@email.com&gt;', u'\n', u'234234234234234', u'\n']
[u'\n', u'"JSC company inc. 02" &lt;email2@email.com&gt;', u'\n', u'32423234234', u'\n']
[u'\n', u'"JSC company inc. 03" &lt;email3@email.com&gt;', u'\n', u'23423424324', u'\n']
[u'\n', u'"JSC company inc. 04" &lt;email4@email.com&gt;', u'\n', u'234234232324244', u'\n']
0 голосов
/ 12 октября 2009

+ 1 для BeautifulSoup

Теперь, когда у вас есть данные, вам нужно поместить их в MySQL. Если вы хотите чисто Python-решение, вам также понадобится привязка MySQL-Python .

В противном случае SQL, который вам потребуется для генерации, будет относительно безболезненным. Мы будем угонять пример gnuds. Добавить в начало файла:

 import re

Тогда внизу:

exp = r'\"(.*)\" &lt;(.*)&gt;'
for row in rows:
 matcher = re.match(exp, row[1])
 name, email = matcher.groups()
 phone = row[3]

 sql = "INSERT INTO company (email, name, phone) VALUES ('%s','%s','%s')" % (email, name, phone)
 print sql

Что дает вам вывод как:

INSERT INTO company (email, name, phone) VALUES ('email@email.com','JSC company inc. 00','1231231234');
INSERT INTO company (email, name, phone) VALUES ('email01@email.com','JSC company inc. 01','234234234234234');
INSERT INTO company (email, name, phone) VALUES ('email2@email.com','JSC company inc. 02','32423234234');
INSERT INTO company (email, name, phone) VALUES ('email3@email.com','JSC company inc. 03','23423424324');
INSERT INTO company (email, name, phone) VALUES ('email4@email.com','JSC company inc. 04','234234232324244');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...