특정 속성 만있는 태그를 찾는 방법-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
함수를 사용할 수 있습니다 . 따라서 귀하의 경우 다음을 사용 하여 태그 를 검색하십시오 .findAll
td
valign = "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]')
'Programing' 카테고리의 다른 글
클래스가 정의되었는지 어떻게 확인합니까? (0) | 2020.11.04 |
---|---|
Sublime Text 2가 시작될 때 마지막으로 열린 파일 / 프로젝트를 열지 못하게하는 방법 (0) | 2020.11.04 |
Linux에 pyodbc를 설치할 수 없습니다. (0) | 2020.11.03 |
공개 키를 사용하여 openssl에서 대용량 파일을 암호화하는 방법 (0) | 2020.11.03 |
Git 병합 중단 (0) | 2020.11.03 |