2009-10-11 6 views
0

이 HTML 파일에서 데이터를 추출하고 회사 전화 번호, 회사 이름 및 기본 키가있는 전자 메일을 전화 번호로 사용하여 MySQL 데이터베이스에 저장하는 가장 좋은 방법은 무엇입니까?Python을 사용하여 HTML에서 텍스트 필드를 추출 하시겠습니까?

추출하고 I가 인터넷 검색 제안은 MySQL의 경우

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

에서 일반 HTML munging보기 위해

</tr><tr class="tableRowOdd"> 
       <td>"JSC company inc. 00" &lt;[email protected]&gt;</td> 
       <td>1231231234</td> 
      </tr><tr class="tableRowEven"> 
       <td>"JSC company inc. 01" &lt;[email protected]&gt;</td> 
       <td>234234234234234</td> 
      </tr><tr class="tableRowOdd"> 
       <td>"JSC company inc. 02" &lt;[email protected]&gt;</td> 
       <td>32423234234</td> 
      </tr><tr class="tableRowEven"> 
       <td>"JSC company inc. 03" &lt;[email protected]&gt;</td> 
       <td>23423424324</td> 
      </tr><tr class="tableRowOdd"> 
       <td>"JSC company inc. 04" &lt;[email protected]&gt;</td> 
       <td>234234232324244</td> 
      </tr> <tr> 

답변

6

: MySQL의 튜토리얼 파이썬

1
여기

당신은 파이썬 목록에 td 내용을 얼마나 사용 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) 

ml 파일을 testdata.html으로 변경하고 동일한 디렉토리에서이 스크립트를 실행하십시오. 나는 확실히 또한 Beautiful Soup를 추천 여기에 게시 된 데이터와 는, 출력은 구문 분석에 대한

[u'\n', u'"JSC company inc. 00" &lt;[email protected]&gt;', u'\n', u'1231231234', u'\n'] 
[u'\n', u'"JSC company inc. 01" &lt;[email protected]&gt;', u'\n', u'234234234234234', u'\n'] 
[u'\n', u'"JSC company inc. 02" &lt;[email protected]&gt;', u'\n', u'32423234234', u'\n'] 
[u'\n', u'"JSC company inc. 03" &lt;[email protected]&gt;', u'\n', u'23423424324', u'\n'] 
[u'\n', u'"JSC company inc. 04" &lt;[email protected]&gt;', u'\n', u'234234232324244', u'\n'] 
+0

를 국물이 너무 아름답다! – ritratt

1

입니다.

텍스트를 데이터베이스에 저장하려면 좋은 Python ORM을 사용하는 것이 좋습니다. 가능한 한 ORM을 Django에서 사용하는 것이 가장 좋습니다. Django를 사용하면 ORM을 얻을뿐만 아니라 웹 브라우저를 통해 데이터베이스를 검색 할 수있는 웹 인터페이스를 사용할 수 있습니다. 웹 브라우저를 사용하여 데이터베이스에 데이터를 입력 할 수도 있습니다.

장고를 사용할 수없는 경우 SQLAlchemy을 권장합니다.

행운을 비네.

1

lxml으로 jQuery로 할 수있는 것처럼 쉽게 할 수 있습니다.

BeautifulSoup로

에 대한

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() 
0

+1 이제 데이터를 가지고, 당신은 MySQL의에 넣어해야합니다. 순수한 Python 솔루션을 원한다면 MySQL-Python 바인딩이 필요합니다.

그렇지 않으면 생성해야하는 SQL이 비교적 쉽습니다. 우리는 그놈의 예를 납치 할 것입니다. 파일의 상단에 추가

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 protected]','JSC company inc. 00','1231231234'); 
INSERT INTO company (email, name, phone) VALUES ('[email protected]','JSC company inc. 01','234234234234234'); 
INSERT INTO company (email, name, phone) VALUES ('[email protected]','JSC company inc. 02','32423234234'); 
INSERT INTO company (email, name, phone) VALUES ('[email protected]','JSC company inc. 03','23423424324'); 
INSERT INTO company (email, name, phone) VALUES ('[email protected]','JSC company inc. 04','234234232324244'); 
+0

데이터를 이스케이프 처리해야합니다. 필드에'''가 있으면 SQL에 구문 오류가 발생합니다. 더 나쁜 - 그것은 SQL 주입을 위해 사용될 수 있습니다. –

+0

아 물론 그렇습니다. 우리가 설정된 HTML 페이지에서 긁어 모으고있는 것처럼 보일지라도, 엄격함 수준은 필요하지 않을 수 있습니다. 어쨌든 파이썬 cgi.escape() 메서드는 따옴표를 사용하지 않지만이 중 일부를 수행합니다. – fitzgeraldsteele

관련 문제