1. 파충류 소개
-
파충류란 무엇입니까?
-
즉, 우리는 항상 중요한 데이터 정보를 인터넷에 저장하기를 희망합니다
为己所用
.
예를 들면 다음과 같습니다.- 피가 끓어오르는 멋진 사진들을 볼 때마다 나중에 바탕화면에 배경화면으로 저장해두고 싶었거든요.
- 일부 중요한 데이터(각계각층)를 검색할 때 향후 다양한 판매 행동에 빛을 더하기 위해 이를 보관하고 싶습니다.
- 이상하고 흥미로운 비디오를 탐색할 때 나중에 맛볼 수 있도록 하드 디스크에 저장하고 싶습니다.
- 훌륭한 노래 트랙을 탐색할 때 우리의 지루한 삶에 멋진 부분을 추가할 수 있도록 저장하고 싶습니다.
能看见的东西
크롤링되는 항목은 의 일부 항목 이어야 한다는 점에 유의해야 합니다公开
.
파충류 창과 방패
-
反爬机制
:- 포털 웹사이트는 상응하는 또는 기술적 수단(암호화)을 공식화하여
策略
크롤러가 웹사이트 데이터를 크롤링하는 것을 방지 할 수 있습니다.
- 포털 웹사이트는 상응하는 또는 기술적 수단(암호화)을 공식화하여
-
反反爬策略
(JS 역방향):- 크롤러 프로그램은 포털 웹사이트에서
策略或者技术手段
관련破解
크롤링 방지 메커니즘을 공식화하여 포털 웹사이트에서 관련 데이터를 얻을 수 있습니다.
robots.txt 프로토콜: Baidu Spider
- 크롤러 프로그램은 포털 웹사이트에서
-
일반적으로
君子协议
. 이는 웹사이트에서以被爬虫爬取
크롤링할 수 있는 데이터와 크롤링할 수 없는 데이터를 지정합니다. 각 웹사이트의 접미사에 robots.txt를 추가하기만 하면 됩니다.
타오바오 신사의 약속입니다
2. 웹 요청 프로세스(예: Baidu)
을 방문하면 百度
브라우저는 请求
이 시간을 Baidu의 서버(Baidu의 컴퓨터)로 보내고 서버는 接收
이 요청을 받은 다음 일부 데이터를 로드하고 브라우저에 반환한 다음 브라우저에 표시합니다. 바이두의 서버가 브라우저로 반환하는 것은 바로 페이지가 아닌 页面源代码
(html, css, js로 구성) 浏览器
페이지의 소스코드를 실행한 후 그 결과를 사용자에게 보여주므로 바이두의 源代码
(즉, 이해할 수 없는 유령의 더미) 구체적인 과정은 그림에 나와 있습니다.
2.1 페이지 렌더링
여기에서 모든 데이터가 페이지 소스 코드에 있는 것은 아니며 일부는 动态加载
js와 같은 도구를 통해 들어옵니다. 이것이 页面渲染数据
프로세스입니다. 두 가지 일반적인 페이지 렌더링 프로세스가 있는데 하나는 이라고 服务器渲染
하고 다른 하나는 이라고 합니다.前端JS渲染
1. 서버 렌더링 -> 페이지 소스코드에서 직접 데이터 검색 가능
우리가 서버에 요청하면 서버는 직접 서버 全部写入
에 데이터를 보내고 우리의 브라우저는 데이터의 html 내용을 전달할 수 있습니다. 데이터는 html에 직접 기록되기 때문에 우리가 볼 수 있는 모든 데이터는 이 일반적으로 크롤링 할 수 있는 종류 의 웹페이지html
直接拿到
页面源代码
相对比较容易
页面内容
2. 프론트엔드 JS 렌더링 -> 페이지 소스 코드에서 데이터를 찾을 수 없습니다.
이것은 약간 번거롭습니다. 이 메커니즘은 일반적으로 서버에 대한 첫 번째 요청으로 여러 HTML 프레임 구조를 반환합니다. 그런 다음 서버는 再次请求
데이터의 실제 저장소로 服务器
데이터를 반환하고 마지막으로 에 반환합니다 浏览器上对数据进行加载
. 다음과 같이:
데이터는 언제 실제로 페이지를 아래로 스크롤하면 jd가 비밀리에 데이터를 로드하고 있는데, 이때 이 페이지를 로드하는 전체 과정을 보려면 브라우저의 디버깅 도구(F12)를 사용해야 합니다.
그래서 페이지 소스코드에서 해당 페이지에 표시된 데이터를 찾을 수 없을 때, 디버깅 도구(F12)에서 관련 왼쪽을 찾을 수 있고, 해당 데이터는 数据包
데이터 패키지(먼저 F12 디버깅 도구를 연 다음 페이지를 새로 고치십시오. 그렇지 않으면 데이터가 로드되어 데이터 패킷에 내용이 없습니다.)
3. 브라우저 도구의 사용(강조)
브라우저는 웹페이지의 상태와 웹페이지에 로드된 콘텐츠를 볼 수 있는 가장 직관적인 장소입니다. 일반 사용자가 거의 사용하지 않는 도구를 F12
아래 . 그 중에서 처음 4개가
가장 중요합니다.Elements, Console, Sources, Network
1. 요소
Elements는 us 实时的网页内容情况
이며 때로는 并不是页面源代码
프런트 엔드 JS에서 렌더링한 콘텐츠도 여기에 표시됩니다. 이것이 바로 웹페이지의 실시간 콘텐츠입니다.
알아채다,
页面源代码
js 스크립트 및 사용자 작업을 실행하는之前
서버에 의해 반환 됩니다.最原始的内容
Elements
에 보이는 내용은js脚本以及用户操作之后
당시의 페이지 표시 효과입니다.
老师批改之前的卷子
하나는 이고 다른 하나는 이라는 것을 알 수 있습니다 老师批改之后的卷子
. 비록 모두 논문이지만 내용은 다릅니다. 그리고 현재 우리가 얻을 수 있는 것은 페이지의 소스 코드입니다. 교정 전 선생님의 모습입니다. 이 점 특별한 주의를 기울여야 합니다.
Elements
에서 사용할 수 있습니다 . 左上角的小箭头
브라우저에서 각 블록의 위치를 직관적으로 볼 수 있습니다 对应的当前html状况
. 여전히 매우 배려적입니다.
2. 콘솔
두 번째 창은 Console
인쇄된 내용과 프로그래머가 남긴 로그 내용을 보는 데 사용됩니다. 여기에 js 코드를 입력하면 자동으로 실행될 수 있습니다.
3. 출처
세 번째 창인 은 Source
여기에서 볼 수 있으며 该网页打开时加载的所有内容
페이지 소스 코드, 스크립트, 스타일, 그림 등이 포함되어 있습니다.
4. 네트워크
네 번째 창은 Network
일반적으로 이라고 부르는 데 사용됩니다 抓包工具
. 즉, 방금 언급한 프런트 엔드 JS 렌더링은 여기에서 볼 수 있으며 , 当前网页加载的所有网络请求
및 을 볼 수 있습니다 请求的详细内容
. 이는 크롤러에게 매우 중요합니다.
4. 하이퍼텍스트 전송 프로토콜
协议
: 두 컴퓨터 사이에 원활한 통신을 위해 설정한 君子协定
프로토콜로 TCP/IP, SOAP 프로토콜, HTTP 프로토콜, SMTP 프로토콜 등이 일반적인 프로토콜입니다.
다른 프로토콜 전송되는 데이터의 형식이 다릅니다.
HTTP协议
, 하이퍼 텍스트 전송 프로토콜(Hyper Text Transfer Protocol)의 약어는 월드 와이드 웹(WWW: World Wide Web) 서버에서 로컬 브라우저로 하이퍼텍스트를 전송하는 데 사용되는 전송 프로토콜입니다 浏览器和服务器之间的数据交互遵守的就是HTTP协议
.
가장 일반적으로 사용되는 HTTP 프로토콜은 加载网页
.
HTTP 프로토콜은 메시지를 세 가지 내용 三大块内容
으로 나눕니다 请求
.响应
묻다:
请求行 -> 请求方式(get/post) 请求url地址 协议
请求头 -> 放一些服务器要使用的附加信息(cookie验证,token,各式各样的反扒信息)
请求体 -> 一般放一些请求参数
응답:
状态行 -> 协议 状态码
响应头 -> 放一些客户端要使用的一些附加信息(cookie验证,token,各式各样的反扒信息)
响应体 -> 服务器返回的真正客户端要用的内容(HTML,json)等 页面代码
크롤러를 작성할 때는 특별한 주의를 기울이십시오 请求头和响应头
. 일반적으로 이 두 곳은隐含着一些比较重要的内容
注意
, 브라우저는 실제로 HTTP 요청과 응답의 내용을 재구성하여 우리가 읽기 쉽게 하는 효과로 표시됩니다.
요청 헤더의 가장 중요한 콘텐츠 중 일부 常见
(크롤러에 필요):
User-Agent
: 요청의 전달자身份标识
(요청을 보내는 데 사용되는 것)Referer
:防盗链
(이 요청은 어느 페이지에서 왔습니까? 크롤링 방지 기능이 사용됩니다)cookie
: 지역 문자열 데이터 정보(사용자 로그인 정보, 등반 방지 토큰)Content-Type
: 서버가 클라이언트数据类型
(str, json 등) 에 다시 응답합니다.
응답 헤더 중 일부 重要的内容
:
- 쿠키: 로컬 문자열 데이터 정보(사용자 로그인 정보, 크롤링 방지 토큰)
- 모든 종류의 마법의
莫名其妙
끈 (다양한 공격과 등반 방지를 방지하기 위해 경험, 일반적으로 토큰이라는 단어가 필요함)
https 프로토콜
와 거의 http协议
동일합니다. s
안전을 의미합니다 安全的超文本传输协议
. (데이터 암호화)
암호화 방식(3종)
1. 대칭키 암호화
이는 클라이언트가 먼저 将即将发送给服务器端的数据
암호화 가 완료된 数据加密
후 서버가 키를 사용하여 암호문 데이터를 해독하고 마지막으로 을 의미합니다 .加密的方式是由客户端自己指定的
密文包括解密的方式(密钥)一块发送给服务器端
接收到了密钥和加密的密文数据
服务器端会获得原文数据
-
단점
-
- 키와 암호문이 처리되는 동안
数据传输的过程中
제3자 조직이拦截
이를 얻을 가능성이 매우 높습니다存在数据暴露的风险
.
- 키와 암호문이 처리되는 동안
2. 비대칭 키 암호화
대칭암호의 잠재적인 안전성 위험을 목표로 향상된 암호화 방식을 사용하는데, 이를 사용할 때 두 개의 잠금이 있는데 하나는 " "라고 하고 다른 하나는 " "이라고 합니다. 비객체 암호화를 사용할 경우 서버는 먼저 클라이언트에게 알려 私有密钥
줍니다 公开密钥
. 公开密钥
지시加密处理
클라이언트가 公开密钥加密
서버는 정보를 받아 自己的私有密钥
복호화하는데, 이점은 解密的钥匙根本就不会进行传输
입니다 避免了被挟持的风险
. 도청자가 공개키를 알아내더라도 복호화가 어렵다. 왜냐하면 복호화 과정은 이산대수를 계산하는 것이기 때문에 쉽지 않다.
-
결점:
-
- 1.
效率比较低
처리하기가 더 복잡하고 의사소통 과정에 효율성 문제가 있습니다影响通信速度
. - 2. 키를 전송하는 한 탈취의 위험이 있을 수 있으며, 중개기관이 이를
公钥篡改
클라이언트에게 전송하는 경우不能保证
에는 클라이언트가 획득한 공개키를 서버에서 생성해야 합니다.
- 1.
3. 인증서 키 암호화
비대칭 키 암호화의 결함으로 인해 클라이언트가 획득한 공개 키가 반드시 서버에서 생성되어야 한다고 보장할 수 없으므로 인증서 키 암호화가 도입됩니다.
서버 개발자가 을 가지고 다니고 , 公开密钥
디지털 向数字证书认证机构提出公开密钥的申请
인증서 인증 기관은 认清申请者的身份
감사를 통과한 후 开发者申请
공개 키를 만들고 그 안에 키를 넣어서 묶습니다. 클라이언트가 디지털 인증서의 디지털 서명을 사용하여 서버가 전달한 공개 키가 인증되었는지 확인하기 때문에 서버는 이를 사용합니다. 일반적으로 인증기관의 신뢰성에 달려있습니다. 정보가 올바른 것으로 확인되면 메시지를 통과하고 , 받은 후 자체적으로 사용합니다 . 数字签名
分配这个已经签名的公开密钥
证书
数字证书发送给客户端
客户端也认可证书机构
验证公钥的真伪
证书的数字签名很难被伪造的
客户端
公钥
加密发送
服务器
私钥进行解密
V. 요약
- 원하는 내용은 해당 페이지의 소스코드에 있습니다.
源代码
추출된 데이터를 직접 가져오시면 됩니다. - 원하는 내용이 페이지의 소스 코드에 없으므로 데이터를 로드하기 위한 실제 요청을 찾을 수 있는 방법을 찾은 다음 데이터를 추출해야 합니다.
- 주의 준수
君子协定
- 요청 헤더의 공통 콘텐츠:
User-Agent
,referer
,cookie
,Content-Type