BeautifulSoup 관련 간단한 코드 질문 ..

조회수 1095회

 import requests, bs4
 res = requests.get('http://tuportaldesbloqueo.com/')
 res.raise_for_status()
 soup = bs4.BeautifulSoup(res.text, "html.parser")
 elmes = soup.select('title')

 for elem in elmes:                                    
     print(elmes)

(j16134uk) EUNHYUKui-MacBook-Pro:tuportaldesbloqueo.com eunhyulkim$ python output1.py 
[<title>Davivienda</title>]

현재 프로그램 인데요

프린트 결과값에 [<title> </title>] 부분의 태그없이, 내용만 받아오고 싶어서,

elmess = elmes.replace("<title>","") 이런식으로 없애야 할 것 같아서 해보니

AttributeError: 'list' object has no attribute 'replace'

에러가 나오더라구요..

이런 경우에는 어떻게 처리를 해야 할까요..?

2 답변

  • 아래와 같이 elmess 가 list 라면 아래와 같이 항목을 , 로 구분짓거나 혹은 모든 요소를 하나의 문자열로 만들 수 있습니다.

    tag 제거는 정규식으로 제거하면 됩니다.

    In [1]: v = ["<title>Davivienda</title>"]
    
    In [2]: ''.join(v)
    Out[2]: '<title>Davivienda</title>'
    
    In [3]: import re
    
    In [4]: re.sub('<.+?>', '', ''.join(v)).strip()
    Out[4]: 'Davivienda'
    

    그런데 bs4 의 select 결과는 bs4.element.Tag list이므로 text 속성을 이용하는 편이 낫습니다.

    In [9]: import requests, bs4
       ...: res = requests.get('http://tuportaldesbloqueo.com/')
       ...: res.raise_for_status()
       ...: soup = bs4.BeautifulSoup(res.text, "html.parser")
       ...: elmes = soup.select('title')
    
    In [10]: elmes
    Out[10]: [<title>Davivienda</title>]
    
    In [11]: elmes[0].text
    Out[11]: 'Davivienda'
    
    In [12]: type(elmes[0])
    Out[12]: bs4.element.Tag
    
  • import requests, bs4
    res = requests.get('http://tuportaldesbloqueo.com/')
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, "html.parser")
    title = soup.select_one('title').text
    print(title)
    

    페이지의 제목 즉 Title만 추출하시는 거라면
    한가지의 Element를 추출하는 것을 알고 있기 때문에
    select_one으로 단일 대상을 select하여 추출하시면 굳이 List객체로 데이터를 얻지 않아도 됩니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)