BeautifulSoup에서 지정한 class 스타일의 div 구현 가져오기

3881 단어 BeautifulSoupclassdiv
지정한 라벨의 내용을 어떻게 얻는지는 웹 페이지의 데이터를 분석하는 필수적인 수단이다. 예를 들어 를 얻으려면...
이런div라벨은 보통 세 가지 방법이 있는데,
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를 획득하는 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기