문제

먼저 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 파일을 만들 수 있어야합니다.

실제로 문제가 무엇인지 말해야한다고 생각합니다. "여전히 작동하지 않습니다"는 문제가되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top