BeautifulSoup에서 지정한 class 스타일의 div 구현 가져오기
3881 단어 BeautifulSoupclassdiv
이런div라벨은 보통 세 가지 방법이 있는데,
1) 문자열로 방법을 찾은 다음str.index(patternStr)나str.find(patternStr)와 같은 문자열을 구분합니다. 이런 방법은 빠르지만 절차가 많습니다. 왜냐하면 머리에서 끝을 제거해야 하기 때문입니다.
2) 정규 표현식, 예를 들어'
사이의 내용:1) 문자열로 방법을 찾은 다음str.index(patternStr)나str.find(patternStr)와 같은 문자열을 구분합니다. 이런 방법은 빠르지만 절차가 많습니다. 왜냐하면 머리에서 끝을 제거해야 하기 때문입니다.
2) 정규 표현식, 예를 들어'
([\s\S]+?)
', 정규 표현식의 괄호를 통해 일치하는 내용, 즉
import re
def getTags(html):
reg = r'<div class="result_info">([\s\S]+?)</div>'
pattern= re.compile(reg)
tags= re.findall(pattern, html)
return tags
그러나 정규 표현식은'([\s\S]+?)
'괄호의 물음표는 탐욕스럽지 않은 일치를 나타냅니다. 정상적인 상황에서 필요한 내용과 일치할 수 있으나,class='result_info'의 div에 하위 div가 끼워져 있다면, 정규 표현식의 뒷부분''는 하위 div의 끝 부분인 와 일치하며, 원하는 부모 div가 아닙니다.만약 이런 html가 있다면:
<div class="result_info">
<p>some paragraph test 1
</p>
<p>some paragraph test 2
</p>
<div id="div_sub" class="sub_div_style">
some contents in sub div
</div>
backend content here
</div>
그러면 backend contents here 이 내용은 일치하지 않을 것입니다. 정규 표현식은 id를 div_sub의 를 끝으로 합니다.3) 제3자 라이브러리, 예를 들어 BeautifulSoup을 사용하면 장점이 정확하고 속도가 문자열보다 절분, 정규 표현식보다 느리다는 단점이 있다. 다음은 BeautifulSoup의 사용법을 설명한다.
BeautifulSoup 공식 문서의 설명에 따르면 도저히 성공할 수 없습니다. 나중에 바이두에서 (http://zhidao.baidu.com/question/433247968620775644.html) 답을 찾았습니다. 정말 허튼소리입니다. 유효한 코드를 첨부합니다.
soup=BeautifulSoup(html)
print soup.find_all(name='div',attrs={"class":"footer"})# attrs
전체:
from bs4 import BeautifulSoup
import urllib2
def getTargetDiv(url,myAttrs):
html=urllib2.urlopen(url).read()
soup=BeautifulSoup(html)
return soup.find_all(name='div',attrs=myAttrs)
if __name__=="__main__":
url=r'http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/'
myAttrs={'class':'footer'}
print getTargetDiv(url, myAttrs)
공식 문서 http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ 에 따라 다음을 수행합니다.
#1.soup.find_all("a", class_="sister")
#2.css_soup.find_all("p", class_="body")
#3.soup.find_all(href=re.compile("elsie"))
바꾸다
soup.find_all(name='div',class_=re.compile('info_item'))
혹은
soup.find_all('div',class_='info_item')
일치하는 결과가 없습니다. 테스트를 통해 soup이 필요합니다.find_all (name='div','attrs={'class':'footer'}) 이렇게 해서attrs 매개 변수에 사전 형식으로 값을 부여해야 합니다.또 다른 예는 지정한 스타일의 div 내의 모든 그림 URL을 가져오고 다운로드하여 저장합니다.
urls=[]
for img in soup.find('div',attrs={'class':'wrap'}).find_all('img'):# class="wrap" div <img>
urls.append(img.attrs['src'])# img src ,
i=0
savedir=r'C:\Users\hp\Desktop\Images'#
for url in urls:
urllib.urlretrieve(url, '%s\%s.jpg'%(savedir,i))
i+=1
print 'Done'
추가 사용법, 참조: https://www.jb51.net/article/184386.htm이 Beautiful Soup에서 지정한class 스타일의 div를 획득하는 실현에 관한 글을 소개합니다. 더 많은 Beautiful Soup에서 class 스타일의 div를 획득하는 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
GIS×Python~지오코딩으로 위치 정보 취득~상권 분석할 때 목표물이나 시설의 위치 정보를 갖고 싶거나 한다. 일일이 손 입력해서 검색하는 것이 조금 귀찮아서 지오코딩을 반자동화해 보았다. 사쿠토 1시간 정도로 쓴 코드이므로 특히 어려운 일은 하지 않고, 보다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.