2016-12-07 3 views
0

BeautifulSoup을 사용하여 HTML 페이지에서 일부 데이터를 추출합니다. 내가 뭐하는 거지 것은 :Beautiful Soup 정확한 태그 데이터

list=soup.find_all('td', {'align': 'left', 'valign': None}) 
print list[0] 

그것은 나에게

<td align="left">\n<h3>Name XYZ</h3>\n CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, <br/>KANDIVALI EAST,<br/>Mumbai MAHARASHTRA-400101</td> 

을 제공하지만 같은 출력합니다 :

Name: Name XYZ, Add: CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, KANDIVALI EAST, Mumbai MAHARASHTRA-400101 

는 어떻게해야합니까?

답변

0

find_all 태그의 목록을 반환합니다, 그래서 당신은 목록 list[0]의 첫 번째 항목에 액세스 할 때, 당신이 태그의 텍스트를 추출 할 경우

출력, 사용할 수있는 것처럼, 첫 번째 태그를 반환합니다 tag.text은, 귀하의 경우

list[0].text 
0

는 사실, 난 당신이 찾고있는 내용에 따라 그 두 가지 방법이 있다는 것을 생각합니다. 오타 나하지 "이름"과는 원하는 출력의 앞에 문자열을 "추가"여부를

임 확실하지 않은, 그래서 여기에 내가 그것을 수행하는 방법에 표시되는 두 가지 방법은 다음과 같습니다

  1. 에서 find_all 메서드에서 얻은 list_tags 메서드의 각 태그 아래에있는 모든 텍스트를 추출하려는 경우 각 단어를 분리하는 등의 조작을하지 않고 get_text() 메서드로 이동하십시오. 그와

, 당신은 같은 간단한 지능형리스트를 선택할 수 있습니다 :

>>> simple_uni_text = [tag.get_text() for tag in list_tags] 
>>> simple_uni_text 
[u'\nName XYZ\n CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, KANDIVALI EAST,Mumbai MAHARASHTRA-400101', u'\nName ABC\n DUT WITHOUT LAYIN, 45 FOOT AODR, RUKTHA SIMPLE, BOMBAY WEST,BOMBAY RASHTRAMAHA-400101'] 
>>> len(simple_uni_text) 
>>> 2 # I pretended the list_tags to have two tags, so it generated a list of length two! 
  • stripped_strings발전기
      을.

    아마도 더 까다로운 방법 일 수 있습니다. 그러나 당신은 정밀함을 얻을 수 있습니다.

    >>> uni_stripped_words = [] 
    >>> for tag in list_tags: 
         for string in tag.stripped_strings: 
          uni_stripped_words.append(string) 
    >>> uni_stripped_words 
    [u'Name XYZ', u'CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX,', u'KANDIVALI EAST,', u'Mumbai MAHARASHTRA-400101', u'Name ABC', u'DUT WITHOUT LAYIN, 45 FOOT AODR, RUKTHA SIMPLE,', u'BOMBAY WEST,', u'BOMBAY RASHTRAMAHA-400101'] 
    >>> len(uni_stripped_words) 
    8 
    

    여기서 list_tags의 각 teag 아래에있는 각 문자열을 다른 문자와 구분합니다. 따라서 실제로 텍스트 앞에 다음과 같은 "이름"과 "추가"를 추가하려면 사용자의 요구에 더 잘 부합 할 수 있습니다.

    >>> for word in uni_stripped_words: 
         print word 
    
    
        Name XYZ 
        CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, 
        KANDIVALI EAST, 
        Mumbai MAHARASHTRA-400101 
        Name ABC 
        DUT WITHOUT LAYIN, 45 FOOT AODR, RUKTHA SIMPLE, 
        BOMBAY WEST, 
        BOMBAY RASHTRAMAHA-400101 # Sorry for the weird text example haha 
    

    그러나 두 번째 방법은 제어하기 어렵습니다. 예를 들어 예기치 않은 문자가있을 수 있습니다. 개인적으로 출력물을 파일에 쓸 때 연결하는 것을 선호합니다!

    어쨌든 두 경우 모두 결과 목록에 유니 코드 형식의 추출 텍스트가 포함된다는 것을 잊지 마십시오.

    건배

  • 관련 문제