Programing

특정 속성 만있는 태그를 찾는 방법-BeautifulSoup

lottogame 2020. 11. 4. 07:35
반응형

특정 속성 만있는 태그를 찾는 방법-BeautifulSoup


BeautifulSoup을 사용하여 내가 검색하는 속성 만 포함 된 태그를 어떻게 검색합니까?

예를 들어 모든 <td valign="top">태그 를 찾고 싶습니다 .

다음 코드 : raw_card_data = soup.fetch('td', {'valign':re.compile('top')})

원하는 모든 데이터를 가져 오지만 <td>속성이 있는 태그 도 가져 옵니다.valign:top

나는 또한 시도했다 : raw_card_data = soup.findAll(re.compile('<td valign="top">'))그리고 이것은 아무것도 반환하지 않는다 (아마도 잘못된 정규식 때문에)

"찾기 말을 BeautifulSoup로있는 방법이 있다면 궁금 해서요 <td>그의 유일한 속성입니다 태그 valign:top"

예를 들어, HTML 문서에 다음 <td>태그가 포함 된 경우 UPDATE :

<td valign="top">.....</td><br />
<td width="580" valign="top">.......</td><br />
<td>.....</td><br />

첫 번째 <td>태그 ( <td width="580" valign="top">) 반환 하고 싶습니다.


BeutifulSoup 문서 에 설명 된대로

이것을 사용할 수 있습니다 :

soup = BeautifulSoup(html)
results = soup.findAll("td", {"valign" : "top"})

편집하다 :

valign = "top"속성 만있는 태그를 반환하려면 tag attrs속성 의 길이를 확인할 수 있습니다 .

from BeautifulSoup import BeautifulSoup

html = '<td valign="top">.....</td>\
        <td width="580" valign="top">.......</td>\
        <td>.....</td>'

soup = BeautifulSoup(html)
results = soup.findAll("td", {"valign" : "top"})

for result in results :
    if len(result.attrs) == 1 :
        print result

그 결과 :

<td valign="top">.....</td>

설명서에 설명 된대로의 lambda함수를 사용할 수 있습니다 . 따라서 귀하의 경우 다음을 사용 하여 태그 를 검색하십시오 .findAlltdvalign = "top"

td_tag_list = soup.findAll(
                lambda tag:tag.name == "td" and
                len(tag.attrs) == 1 and
                tag["valign"] == "top")

값이있는 속성 이름으로 만 검색하려는 경우

from bs4 import BeautifulSoup
import re

soup= BeautifulSoup(html.text,'lxml')
results = soup.findAll("td", {"valign" : re.compile(r".*")})

Steve Lorimer에 따르면 정규식 대신 True를 전달하는 것이 좋습니다.

results = soup.findAll("td", {"valign" : True})

가장 쉬운 방법은 새로운 CSS 스타일 select방법을 사용하는 것입니다.

soup = BeautifulSoup(html)
results = soup.select('td[valign="top"]')

다음의 인수로 전달하십시오 findAll.

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("""
... <html>
... <head><title>My Title!</title></head>
... <body><table>
... <tr><td>First!</td>
... <td valign="top">Second!</td></tr>
... </table></body><html>
... """)
>>>
>>> soup.findAll('td')
[<td>First!</td>, <td valign="top">Second!</td>]
>>>
>>> soup.findAll('td', valign='top')
[<td valign="top">Second!</td>]

Chris Redford의 대답과 Amr의 대답을 조합하면 select 명령을 사용하여 값이있는 속성 이름을 검색 할 수도 있습니다.

from bs4 import BeautifulSoup as Soup
html = '<td valign="top">.....</td>\
    <td width="580" valign="top">.......</td>\
    <td>.....</td>'
soup = Soup(html, 'lxml')
results = soup.select('td[valign]')

참고URL : https://stackoverflow.com/questions/8933863/how-to-find-tags-with-only-certain-attributes-beautifulsoup

반응형