라이브러리를 얻고 문자열로 변환하는 HTML 페이지 요청을 사용하면, 더 구문 분석 HTML 페이지 형식에 대한 필요성이 유용한 정보를 추출합니다.
파싱 HTML 및 XML을 처리하기위한 라이브러리 BeautifulSoup4도 (짧은 전후 사용) BS4 라이브러리라고도.
1. 전화
BS4 라이브러리 기지국은 가장 중요한 부문이며, 객체의 각 인스턴스는 HTML 페이지에 해당
필요에서 가져 기지국이 BeautifulSoup로의 학사를 통해 객체를 생성, 클래스를 도입 ()
다음과 같이 코드입니다 :
수입 요청 에서 BS4의 수입 BeautifulSoup로 R = requests.get ( " https://www.baidu.com/은 " ) r.encoding = " UTF-8 " 수프 = BeautifulSoup로 (r.text) 인쇄 (유형 (스프))
결과 :
2. 일반적인 특성
BeautifulSoup로 개체가 요소 A]에 의해 제조 할 수있는 태그 (꼬리표) HTML을 각각 포함하는 트리 구조이다 만들었다. <B> 형태로 수득
다음과 같이 일반적인 속성은 다음과 같습니다
머리:
HTML 페이지의 <head> 내용
표제:
HTML 페이지의 제목, <헤드>에서 태그 <제목>
신체:
HTML 페이지 <body> 콘텐츠
피:
첫 번째 페이지의 HTML <P> 내용
문자열 :
HTML 콘텐츠는 모든 문자열 그 웹 페이지에 표시 라벨
stripped_string :
HTML 웹 페이지가 모두 비어 있지 않은 문자열에 표시
그런 다음 "당신이 알고, 바이."크롤링 바이두의 슬로건 시도
첫째, 우리는 요청에 의해 요청을 설정, 소스를 확인하여 해당 부분을 찾을 수 있습니다
으로는 다음과 같습니다 :
그래서 직접에 <제목> 태그를 호출하여
다음과 같이 코드입니다 :
수입 요청 에서 BS4의 수입 BeautifulSoup로 R = requests.get ( " https://www.baidu.com/ " ) r.encoding = " UTF-8 " 수프 = BeautifulSoup로 (r.text) 제목 = soup.title 인쇄 (제목 )
결과는 다음과 같다 :
3. 라벨의 일반적인 속성
다음과 같이 각 태그 BS4 오브젝트 태그를 예를 들어 쌀 칭한다 또한 목적 일반적인 구조는 다음과 같다 :
<a class="mnav" href="http://www.nuomi.com"> 糯米 </a>를
상기 각괄호 (<>) 태그 이름은 이름 및 다른 상품 바인드합니다 각괄호 사이 문자열의 내용 인
그래서 일반적인 속성 라벨 네 종류로 구분됩니다
이름:
문자열 이름, 라벨
바인드합니다 :
사전 그러한 href가 같은 원래의 페이지 태그의 속성이 모두 포함
contrnts :
내용 태그의 하위 태그 모든 목록
끈:
문자열, 태그는 실제 텍스트의 텍스트, 웹 페이지를 포함
문자열은 다음과 같은 원칙을 반환 있도록 때문에 HTML의 태그가 다른 태그에 중첩 될 수 있습니다
① 다른 레이블이 경우, 태그 내의 문자열 특성은 그 내용을 반환
② 내부 태그 태그,하지만 하나 개의 레이블, 문자열 반환 라벨 콘텐츠 안쪽이있는 경우
③ 하나 개 이상의 중첩 내부 레이블이 없음으로 반환되는 경우
여전히 바이두, 예를 들어, 첫째 우리는 다음과해야 코드 <A> 라벨의 문자열을 찾을 필요가 :
수입 요청 에서 BS4의 수입 BeautifulSoup로 R = requests.get ( " https://www.baidu.com/은 " ) r.encoding = " UTF-8 " 수프 = BeautifulSoup로 (r.text) 인쇄 (soup.a.string)
결과는 다음과 같다 :
) (find_all 찾기 ()와 전화 (4)
HTML은 같은 특수 라벨은 13 바이두 홈 <A>의 총에서 같은 내용의 많은 수 있지만 값 1 위를 반환
이 시간을 통해 찾아 find_all 찾을 필요가 그래서,이 두 가지 방법은 조건에 따라 트래버스 HTML 문서 내용으로 돌아갑니다
다음과 같이 사용합니다 :
BeautifulSoup.find_all(name,attrs,recursive,string,limit)
name:以标签名字进行搜索,名字用字符串类型表示
attrs:按照标签的属性来搜索,需要列出属性的名字和值,用json方法表示
recursive:设置查找层次,只查找当前标签的西一层时使用recursiv=false
string:按照关键字查找string属性内容,采用string=开始
limit:返回结果个数,默认全部
至于find()使用方法如find_all()相同,
BeautifulSoup.find_all(name,attrs,recursive,string)
区别在于find()只搜索第一个结果,find_all()返回所有结果。
我们尝试来通过find_all()来获取所有含有“百度”这一关键词的标签
首先需要调用re库,re是python的标准库可以采用compile()对字符串的检索
所以代码如下:
import requests import re from bs4 import BeautifulSoup r=requests.get("https://www.baidu.com/") r.encoding="utf-8" soup=BeautifulSoup(r.text) w=soup.find_all(string=re.compile("百度")) print(w)
结果如下: