BeautifulSoup을 사용하여 HTML 'Datacell'에서 텍스트를 얻는 방법
-
03-07-2019 - |
문제
HTML 파일에서 일부 데이터를 제거하려고했습니다. 올바른 세포를 얻기 위해 논리가 코딩되어 있습니다. 이제 나는 '셀'의 실제 내용을 얻기 위해 고군분투하고 있습니다.
여기 내 HTM Snip이 있습니다
헤드 레 테로우 [0] [10
[<font size="+0"><font face="serif" size="1"><b>Apples Produced</b><font size="3">
</font></font></font>]
이것은 Python []의 목록 항목입니다.
사과가 생산 된 가치가 필요하지만 얻을 수는 없습니다.
모든 제안은 감사 할 것입니다
이것이 나의 영원한 감사를 얻을 것이라고 설명하는 좋은 책에 대한 제안
그 대답에 감사드립니다. 그러나 더 일반적인 대답은 없습니다. 내 셀에 대담한 속성이 없다면 어떻게됩니까?
말하기 :
[<font size="+0"><font face="serif" size="1"><I>Apples Produced</I><font size="3">
</font></font></font>]
사과가 생산되었습니다
문서를 읽거나 이해하는 법을 배우려고 노력하고 있으며 귀하의 응답이 도움이 될 것입니다.
이 도움에 정말 감사합니다. 이 답변의 가장 좋은 점은 그들로부터 일반화하기가 훨씬 쉽다는 것입니다. 그러면 BeautifulSoup 문서에서 그렇게 할 수 있다는 것입니다. 나는 Fortran 시대에 프로그래밍하는 법을 배웠고 나는 Python 학습을 즐기고있는 동안 Power-Beautifulsoup에서 Amzed가 그 예입니다. 문서 전체를 코 헤르넷에 만드는 것은 저에게 힘든 일입니다.
건배
해결책
headerRows[0][10].contents[0].find('b').string
다른 팁
그만큼 BeautifulSoup 문서 필요한 모든 것을 다루어야합니다.이 경우 사용하고 싶은 것처럼 보입니다. findNext
:
headerRows[0][10].findNext('b').string
더 일반적인 솔루션에 의존하지 않는 더 일반적인 솔루션 <b>
태그는 텍스트 논쟁 findAll
,이를 통해서만 검색 할 수 있습니다 NavigableString
사물:
>>> s = BeautifulSoup(u'<p>Test 1 <span>More</span> Test 2</p>')
>>> u''.join([s.string for s in s.findAll(text=True)])
u'Test 1 More Test 2'
나는 모든 아름다운 수프 클래스를 모든 방법으로 확장하는 기본 수업이 있습니다. 이러한 방법 중 하나는 다음과 같습니다.
def clean(self, val):
if type(val) is not StringType: val = str(val)
val = re.sub(r'<.*?>', '', s) #remove tags
val = re.sub("\s+" , " ", val) #collapse internal whitespace
return val.strip() #remove leading & trailing whitespace