크롤러 학습(01): 크롤러 및 하이퍼텍스트 전송 프로토콜 이해

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에서 렌더링한 콘텐츠도 여기에 표시됩니다. 이것이 바로 웹페이지의 실시간 콘텐츠입니다.

알아채다,

  1. 页面源代码js 스크립트 및 사용자 작업을 실행하는 之前서버에 의해 반환 됩니다.最原始的内容
  2. 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 요청과 응답의 내용을 재구성하여 우리가 읽기 쉽게 하는 효과로 표시됩니다.

여기에 이미지 설명 삽입

요청 헤더의 가장 중요한 콘텐츠 중 일부 常见(크롤러에 필요):

  1. User-Agent: 요청의 전달자 身份标识(요청을 보내는 데 사용되는 것)
  2. Referer: 防盗链(이 요청은 어느 페이지에서 왔습니까? 크롤링 방지 기능이 사용됩니다)
  3. cookie: 지역 문자열 데이터 정보(사용자 로그인 정보, 등반 방지 토큰)
  4. Content-Type: 서버가 클라이언트 数据类型(str, json 등) 에 다시 응답합니다.

응답 헤더 중 일부 重要的内容:

  1. 쿠키: 로컬 문자열 데이터 정보(사용자 로그인 정보, 크롤링 방지 토큰)
  2. 모든 종류의 마법의 莫名其妙끈 (다양한 공격과 등반 방지를 방지하기 위해 경험, 일반적으로 토큰이라는 단어가 필요함)

https 프로토콜

와 거의 http协议동일합니다. s안전을 의미합니다 安全的超文本传输协议. (데이터 암호화)

암호화 방식(3종)

1. 대칭키 암호화

이는 클라이언트가 먼저 将即将发送给服务器端的数据암호화 가 완료된 数据加密서버가 키를 사용하여 암호문 데이터를 해독하고 마지막으로 을 의미합니다 .加密的方式是由客户端自己指定的密文包括解密的方式(密钥)一块发送给服务器端接收到了密钥和加密的密文数据服务器端会获得原文数据

단점
  • 키와 암호문이 처리되는 동안 数据传输的过程中제3자 조직이 拦截이를 얻을 가능성이 매우 높습니다 存在数据暴露的风险.
    여기에 이미지 설명 삽입
2. 비대칭 키 암호화

대칭암호의 잠재적인 안전성 위험을 목표로 향상된 암호화 방식을 사용하는데, 이를 사용할 때 두 개의 잠금이 있는데 하나는 " "라고 하고 다른 하나는 " "이라고 합니다. 비객체 암호화를 사용할 경우 서버는 먼저 클라이언트에게 알려 私有密钥줍니다 公开密钥. 公开密钥지시加密处理클라이언트가 公开密钥加密서버는 정보를 받아 自己的私有密钥복호화하는데, 이점은 解密的钥匙根本就不会进行传输입니다 避免了被挟持的风险. 도청자가 공개키를 알아내더라도 복호화가 어렵다. 왜냐하면 복호화 과정은 이산대수를 계산하는 것이기 때문에 쉽지 않다.

결점:
  • 1. 效率比较低처리하기가 더 복잡하고 의사소통 과정에 효율성 문제가 있습니다 影响通信速度.
  • 2. 키를 전송하는 한 탈취의 위험이 있을 수 있으며, 중개기관이 이를 公钥篡改클라이언트에게 전송하는 경우 不能保证에는 클라이언트가 획득한 공개키를 서버에서 생성해야 합니다.

여기에 이미지 설명 삽입

3. 인증서 키 암호화

비대칭 키 암호화의 결함으로 인해 클라이언트가 획득한 공개 키가 반드시 서버에서 생성되어야 한다고 보장할 수 없으므로 인증서 키 암호화가 도입됩니다.
서버 개발자가 을 가지고 다니고 , 公开密钥디지털 向数字证书认证机构提出公开密钥的申请인증서 인증 기관은 认清申请者的身份감사를 통과한 후 开发者申请공개 키를 만들고 그 안에 키를 넣어서 묶습니다. 클라이언트가 디지털 인증서의 디지털 서명을 사용하여 서버가 전달한 공개 키가 인증되었는지 확인하기 때문에 서버는 이를 사용합니다. 일반적으로 인증기관의 신뢰성에 달려있습니다. 정보가 올바른 것으로 확인되면 메시지를 통과하고 , 받은 후 자체적으로 사용합니다 . ​​​​数字签名分配这个已经签名的公开密钥证书
数字证书发送给客户端客户端也认可证书机构验证公钥的真伪证书的数字签名很难被伪造的客户端公钥加密发送服务器私钥进行解密
여기에 이미지 설명 삽입

V. 요약

  1. 원하는 내용은 해당 페이지의 소스코드에 있습니다. 源代码추출된 데이터를 직접 가져오시면 됩니다.
  2. 원하는 내용이 페이지의 소스 코드에 없으므로 데이터를 로드하기 위한 실제 요청을 찾을 수 있는 방법을 찾은 다음 데이터를 추출해야 합니다.
  3. 주의 준수君子协定
  4. 요청 헤더의 공통 콘텐츠: User-Agent, referer, cookie,Content-Type

추천

출처blog.csdn.net/m0_48936146/article/details/127281659