크롤러의 데이터 획득은 일반적으로 두 단계로 나눌 수 있습니다.
- 웹 페이지 가져 오기
주로 사용 requests
(웹 페이지 요청 보내기) selenium
(브라우저를 사용하여 웹 페이지에 액세스)
- 웹 페이지 구문 분석
주로 사용 BeautifulSoup
다음은 위의 세 가지 라이브러리의 사용을 간략하게 소개합니다.
요청은 URL에서 페이지를 가져옵니다.
pip install requests
설치 사용
import requests
참조 사용
빠른 사용
import requests
r = requests.get('http://zoollcar.top') # 发送请求到url
print(r.text) # 输出获取到的页面文本
7 가지 주요 요청 방법
형식 사용 requests.ge(url, params=None, **kwargs)
방법 | 풍모 |
---|---|
requests.request() |
다른 모든 방법에 대한 기본 방법 |
requests.get() |
URL의 내용 가져 오기 |
requests.head() |
URL 위치 자원의 응답 메시지 보고서 획득, 즉 자원의 헤더 정보 획득 요청 |
requests.post() |
URL 위치에서 리소스 요청 후 새 데이터 첨부 |
requests.put() |
URL 위치에 리소스를 저장하도록 요청하고 원래 URL 위치의 리소스를 덮어 씁니다. |
requests.patch() |
URL 위치에서 리소스의 부분 업데이트, 즉 리소스 콘텐츠의 일부 변경을 요청합니다. |
requests.delete() |
URL 위치에 저장된 리소스 삭제 요청 |
선택적 매개 변수 **kwargs
매개 변수 | 기술 |
---|---|
매개 변수 | url에 매개 변수로 추가 된 사전 또는 바이트 시퀀스 |
데이터 | 요청의 내용으로 사전, 바이트 시퀀스 또는 파일 객체 |
json | 요청 내용으로 JSON 형식의 데이터 |
헤더 | 사전, HTTP 사용자 정의 헤더 |
쿠키 | 사전 또는 CookieJar, 요청의 쿠키 |
인증 | 튜플, HTTP 인증 기능 지원 |
파일 | 사전 유형, { 'file': open ( 'data.xls', 'rb')} |
타임 아웃 | 시간 초과 기간 (초) 설정 |
프록시 | 사전 유형, 액세스 프록시 서버 설정, 로그인 인증 증가 가능 |
allow_redirects | True / False, 기본값은 True, 리디렉션 스위치 |
True / False 스트림 | 기본값은 True이며 콘텐츠를 즉시 다운로드합니다. |
참 / 거짓 확인 | 기본값은 True, 인증 SSL 인증서 스위치입니다. |
인증서 | 로컬 SSL 인증서 경로 |
브라우저를 통한 Selenium 액세스 URL
pip install selenium
설치 사용
from selenium import webdriver
참조 사용
빠른 사용
from selenium import webdriver # 引入
driver = webdriver.Firefox() # 关联到本地火狐浏览器
driver.get("http://zoollcar.top") # 用浏览器打开网页
a = driver.find_element_by_css_selector('.site-title') # 通过css选择器选择元素
print(a.text) # 访问元素内容
!! 것을 참고 하면된다 해당 드라이버 파이어 폭스 브라우저를 설치해야
geckodriver.exe
구글이되는chromedriver.exe
시스템 경로가 들어있는 디렉토리에 넣어
다양한 선택기
선택자 | |
---|---|
find_elements_by_css_selector('div.edit') |
CSS에 따라 선택 |
find_elements_by_xpath('//div[@class='edit']') |
xpath에 따라 선택 |
find_elements_by_id('id') |
id 속성에 따라 선택 |
find_elements_by_name('name') |
이름 속성에 따라 선택 |
find_elements_by_link_text('www.zoollcar.top') |
주소 링크에 따라 선택 |
find_elements_by_tag_name('h1') |
요소 이름으로 선택 |
find_elements_by_class_name('edit') |
클래스에 따라 선택 |
이 목록은
첫 번째 목록이elements
교체되는 한 if 와 일치합니다.element
CSS, 그림, js 표시 및 실행 제어
from selenium import webdriver # 引入
fp = webdriver.FirefoxProfile() # 引入火狐配置
fp.set_preference("permissions.default.stylesheet",2) # 禁用CSS
fp.set_preference("permissions.default.image",2) # 禁用 图片显示
fp.set_preference("javascript.enabled",False) # 禁用js 测试不可用(不知道为什么)
driver = webdriver.Firefox( firefox_profile = fp ) # 关联到本地火狐浏览器
BeautifulSoup은 웹 페이지 문자열 분석을 얻습니다.
빠른 사용
import requests
from bs4 import BeautifulSoup
r = requests.get('http://zoollcar.top')
soup = BeautifulSoup(r.text,'html.parser') # 解析获取到的文本
print(soup.h1.string) # 输出第一个h1标签的文本
텍스트를 구문 분석 트리로 전환
라이브러리 from bs4 import BeautifulSoup
bs4 라이브러리를 소개하면 모든 HTML 입력이 utf-8 인코딩으로 바뀝니다.
사용 soup = BeautifulSoup(html,'html.parser')
내장되어 표준 HTML 구문 분석 html로 문자열 구문 분석,
다른 규칙을 준수, 또한 다음과 같은 양식을 사용 할 수 있습니다
soup = BeautifulSoup(html,'lxml')
soup = BeautifulSoup(html,['lxml','xml']])
soup = BeautifulSoup(html,'html5lib')
파싱 후 나무 모양의 객체 인 bs4.BeautifulSoup 클래스 객체를 얻게되며 각 태그를 추출 할 수 있습니다. 주요 추출 방법은 다음과 같습니다.
- 트리 검색
- 나무를 가로 질러
- CSS 선택기
접근 및 검색 방법
콘텐츠 액세스
soup.h1
soup.h1.name
레이블이 h1 인 첫 번째 레이블 찾기 레이블 이름
soup.h1.attrs
레이블 속성
soup.h1.string
레이블 텍스트
두 가지 유형의 문자열을 반환합니다.
NavigableString 비 주석 문자열
주석 주석 문자열
soup.h1.prettify ()는 캐리지 리턴과 공백을 사용하여 인간 친화적 인 방식으로 html을 표시합니다.
검색 방법
soup.find_all (name, attrs, recursive, string, ** kwargs) 특정 콘텐츠 찾기! !
name 태그 검색 이름 검색
속성 : 태그 속성 값 검색 , 레이블링 가능 속성 검색 id = link1
재귀 : 모든 하위 항목 검색 여부, 기본값 True
문자열 : 태그 콘텐츠 검색
soup.find_all ()의 약어는 soup ()입니다.
방법 | 풍모 |
---|---|
<soup>.find() |
하나의 결과 만 검색 및 반환 |
<soup>.find_parents() |
상위 노드에서 검색하고 목록 유형을 반환합니다. |
<soup>.find_parent() |
在先辈节点中返回一个结果 |
<soup>.find_next_siblings() |
在后续平行节点中搜索,返回列表类型 |
<soup>.find_next_sibling() |
在后续平行节点中返回一个结果 |
<soup>.find_previous_siblings() |
在前序平行节点中搜索,返回列表类型,同 |
<soup>.find_previous_sibling() |
在前序平行节点中返回一个结果 |
还可以使用css检索方法
使用<soup>.select('cssSelectName')
检索到结果
遍历的方法
内容遍历方法
方法 | 功能 |
---|---|
下行遍历 | |
.contents | 子节点列表 |
.children | 子节点的迭代类型 |
.descendants | 子孙节点的迭代类型,包含所有子孙节点 |
上行遍历 | |
.parent | 节点的直属父标签 |
.parents | 节点先辈标签的迭代类型 |
平行遍历 | |
.next_sibling | 返回按照HTML文本顺序的下一个平行节点标签 |
.previous_sibling | 返回按照HTML文本顺序的上一个平行节点标签 |
.next_siblings | 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签 |
.previous_siblings | 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签 |