HTML 행을 CSV로 구문 분석합니다
-
23-08-2019 - |
문제
먼저 HTML 행은 다음과 같습니다.
<tr class="evenColor"> blahblah TheTextIneed blahblah and ends with </tr>
나는 진짜 HTML을 보여줄 것이지만 그것을 차단하는 방법을 모른다는 것을 유감스럽게 생각합니다. 수치심을 느낍니다
BeautifulSoup (Python) 또는 기타 권장 화면 스크래핑/구문 분석 방법을 사용하여 동일한 디렉토리의 약 1200.htm 파일을 CSV 형식으로 출력하려고합니다. 이것은 결국 SQL 데이터베이스로 들어갑니다. 각 디렉토리는 1 년을 나타내며 5 년 이상을 할 계획입니다.
나는 주위에 멍청 해졌다 glob
조언에서 이것을하는 가장 좋은 방법으로. 이것이 내가 지금까지 가지고 있고 붙어 있습니다.
import glob
from BeautifulSoup import BeautifulSoup
for filename in glob.glob('/home/phi/data/NHL/pl0708/pl02*.htm'):
#these files go from pl020001.htm to pl021230.htm sequentially
soup = BeautifulSoup(open(filename["r"]))
for row in soup.findAll("tr", attrs={ "class" : "evenColor" })
나는 이것이 추악하다는 것을 알고 있지만 이런 것을 시도한 것은 처음입니다. 이 문제는 수천 개의 파일을 수동으로 통과하고 엑셀에 붙여 넣을 필요가 없다는 것을 깨달은 후이 시점에 도달하는 데 몇 달이 걸렸습니다. 또한 컴퓨터를 좌절감에서 반복적으로 차단할 수 있다는 것을 깨달았으며 여전히 작동하지 않습니다 (권장되지 않음). 나는 가까워지고 있으며 CSV 파일을 만들기 위해 다음에 무엇을 해야할지 알아야합니다. 도와 주시거나 내 모니터가 마침내 망치 펀치를받습니다.
해결책
가져와야합니다 CSV 모듈 추가하여 import csv
파일 상단에.
그런 다음 행 루프 외부에 CSV 파일을 만들려면 다음과 같이 무언가가 필요합니다.
writer = csv.writer(open("%s.csv" % filename, "wb"))
그런 다음 실제로 루프에서 HTML 행에서 데이터를 꺼내야합니다.
values = (td.fetchText() for td in row)
writer.writerow(values)
다른 팁
당신은 왜 당신이 붙어있는 이유를 설명하지 않습니다 - 정확히 작동하지 않는 것은 무엇입니까?
다음 줄은 문제 일 수 있습니다.
soup = BeautifulSoup(open(filename["r"]))
이렇게되어야합니다.
soup = BeautifulSoup(open(filename, "r"))
다음 줄 :
for row in soup.findAll("tr", attrs={ "class" : "evenColor" })
짝수 행에 클래스 'Evencolor'가 있고 홀수 행에 '홀수 콜러'가 있다고 가정하면 짝수를 선택하는 것 같습니다. Evencolor 또는 OddColor 클래스가있는 모든 행을 원한다고 가정하면 정규 표현식을 사용하여 클래스 값과 일치 할 수 있습니다.
for row in soup.findAll("tr", attrs={ "class" : re.compile(r"evenColor|oddColor") })
그것은 괜찮아 보이고 BeautifulSoup은 이것에 유용합니다 (개인적으로 LXML을 사용하는 경향이 있지만). 당신은 당신이 얻은 해당 데이터를 가져올 수 있어야하고, CSV 파일을 만들 수 있어야합니다.
실제로 문제가 무엇인지 말해야한다고 생각합니다. "여전히 작동하지 않습니다"는 문제가되지 않습니다.