<!-- wp:quote -->

<p>爬虫的基本原理</p>
<!-- /wp:quote --> <!-- wp:more --> <!-- /wp:more --> <!-- wp:tadv/classic-paragraph --> <h2>什么是爬虫?</h2> <p><span style="color: #ff9900;">请求</span>网站并<span style="color: #ff9900;">提取</span>数据的<span style="color: #ff9900;">自动化</span>程序</p> <h2>爬虫基本流程</h2> <h4>发起请求</h4> <p>通过http库向目标站点发起请求,即发送一个request,请求可以包含额外的headers等信息,等待服务器响应。</p> <h4>获取响应内容</h4> <p>如果服务器能正常响应,会得到一个response,response等内容便是所要获取的页面内容,类型可能有HTTP,json字符串,二进制数据(如图片视频)等类型。</p> <h4>解析内容</h4> <p>得到的内容可能是html,可以用正则表达式,网页解析库进行解析,可能是json,可以直接专为json对象解析,可能是二进制数据,可以做保存或进一步的处理。</p> <h4>保存数据</h4> <p>保存形式多样,可以存文本,也可以保存至数据库,或者保存特定格式的文件。</p> <h2>什么是request和response?</h2>
  1. 浏览器发送消息给该网址所在的服务器,这个过程叫做http request
  2. 服务器收到浏览器发送的消息后,能根据浏览器发送消息的内容,做相应的处理,然后把消息回传给浏览器,这个过程叫做HTTP response。
  3. 浏览器收到服务器的response信息后,会对信息进行相应处理,然后展示

<p> </p>
<p></p>
<p>我们可以打开一个浏览器,然后随便搜索一些内容,按浏览器的F12,就可以看到开发者模式,然后我们点击network,如果你的network里面没有东西的话,刷新一下当前网页,就可以重新获取了:</p>
<p></p>
<h2>request中包含什么?</h2>
<h4>请求方式</h4>
<p>主要有GET、POST另外还有HEAD、PUT、DELETE、OPTIONS等,常用的就是GET和POST,GET和POST的区别是,get是不安全的,因为get请求会把数据都包含在网页的url里面,比如下图中的百度搜索:</p>
<p></p>
<p>而post是相对安全的,因为它将数据保存在了一个from data的表单中,比如我们登录某个网站时,不能像get那样把我们的用户名密码暴露在URL里面:</p>
<p></p>
<h4>请求URL</h4>
<p>URL全称统一资源定位符,如一个网页文档, 一张图片,一个视频等都可以用URL唯一来确定</p>
<h4 style="text-align: left;">请求头</h4>
<p>包含请求时的头部信息,如user-agent、host、cookies等信息</p>
<h4>请求体</h4>
<p>请求时额外携带的数据,如表单提交时的表单数据。</p>
<h2>response中包含什么?</h2>
<h4>响应状态</h4>
<p>有多种响应状态,如200代表成功,301表示跳转,404表示找不到网页,502、503表示服务器内部错误</p>
<h4>响应头</h4>
<p>如内容类型、内容长度、服务器信息、设置cookies等</p>
<h4>响应体</h4>
<p>最主要的部分,包含了请求资源的内容,如网页HTML,图片,二进制数等</p>
<p>现在我们来模拟一下:</p>
<p>直接用cmd输入python3的版本,然后打印出百度首页</p>

import requests
response = requests.get('http://www.baidu.com')
print(response.text)

<p>之后就会打印出百度首页的源代码,也就是响应体。可以输入print(response.headers)打印出头部信息,输入print(response.status_code)打印出状态码“200”,</p>
<h2>能抓取怎么样的数据?</h2>
<h4>网页文本</h4>
<p>如HTML文档、json格式文本等</p>
<h4>图片</h4>
<p>获取到的是二进制文件,保存为图片格式</p>
<h4>视频</h4>
<p>同为二进制文件, 保存为视频格式即可</p>
<h4>其它</h4>
<p>只要是请求到的,都能获取</p>
<h3>解析方式</h3>

  • 直接处理
  • json解析
  • 正则表达式
  • beautifulsoup
  • PyQuery
  • XPath

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:tadv/classic-paragraph -->
<h3>如何解决JavaScript渲染的问题?</h3>

  • 分析ajax请求
  • 使用webdriver/selenium
  • Splash
  • PyV8
  • Ghost.py

<h3>怎样保存数据?</h3>

  1. 文本:纯文本、json、xml等
  2. 关系型数据库:如mysql、Oracle、SQL server等具有结构化表结构形式存储
  3. 非关系型数据库:如MongoDB、Redis等key-value形式存储
  4. 二进制文件:如图片、视频、音乐等直接保存特定格式即可。

<!-- /wp:tadv/classic-paragraph -->

最后修改:2020 年 02 月 29 日 03 : 19 PM
请俺喝杯咖啡呗