2017-10-12 16 views
1

에서 텍스트를 추출 할 수 없습니다 :다음 명령이 올바르게 HTML 페이지에서 테이블을 추출 태그 BeautifulSoup로

[tr.findAll('td') for tr in table.findAll('tr',{'class': "js-file-line"})] 


[[<td class="blob-num js-line-number" data-line-number="1" id="L1"></td>], 
[<td class="blob-num js-line-number" data-line-number="2" id="L2"></td>, 
<td>Arsenal</td>, 
<td>38</td>, 
<td>26</td>, 
<td>9</td>, 
<td>3</td>, 
<td>79</td>, 
<td>36</td>, 
<td>87</td>], 
[<td class="blob-num js-line-number" data-line-number="3" id="L3"></td>, 
<td>Liverpool</td>, 
etc. 

나는 각 TD의 내용을 추출하는 명령을 수정하고 싶습니다. 찾아야하는 것은 .text가 오류를 반환하기 때문에 는하지만 각 줄의 텍스트를 추출 할 수 없습니다 : [1 :]를

[tr.findAll('td').text[1:] for tr in table.findAll('tr',{'class': "js-file-line"})][1:] 

: 헤더를 생략하는 데 사용됩니다. (그들이 잘 작동 테스트) 나는 다음과 같은 명령을 사용 합니다.

ResultSet object has no attribute 'text'. 
You're probably treating a list of items like a single item. 
Did you call find_all() when you meant to call find()? 

실제로 findall은을 사용하고 나의 이해에서 find_All하는 것과 같습니다 문제는 다음과 같은 오류를 초래는 .text입니다.

이 너무 기본적인 질문 인 경우 죄송합니다 ...

답변

1

find_All 방법은 기본적으로 Tag 개체의 목록입니다 ResultSet 개체를 반환합니다.
textTag 속성이므로 하나 이상의 목록 이해를 사용해야합니다. 행은 'TD'태그가 포함 된 경우

txt = [ 
    [td.text for td in tr.find_all('td')][1:] 
    for tr in table.find_all('tr', {'class': "js-file-line"}) 
    ][1:] 

또는, strings 생성기를 사용할 수 있습니다.

txt = [list(tr.strings)[1:] for tr in table.find_all('tr', {'class': "js-file-line"})][1:] 
+1

나에게 신비로운 생각이 들기는하지만 생각보다 멋지다. 고맙습니다. – user3623123

+0

질문이 있으시면 언제든지 –