python3爬虫笔记

什么是爬虫?

**请求网站并提取**数据的 **自动化**程序

爬虫的基本流程

  1. 发起请求
    • 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应
  2. 获取响应内容
    • 如果服务器能正常响应,会得到一个Response,Response的内容便是索要获取的页面内容,类型可能有HTML,JSON字符串,二进制数据(如图片视频)等类型。
  3. 解析文本内容
    • 得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是JSON,可以直接转为JSON对象解析。可能是二进制数据,可以做保存或者进一步处理。
  4. 保存数据
    • 保存形式多样,可以保存文本,也可以保存至数据库,或者保存特定格式的文件。

什么是Request和Response?

1. 浏览器发送信息给该网址所在的服务器,这个过程叫做HTTP Request。
2. 服务收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应的处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。
3.浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。

Request中包含什么?

Request分为4部分

  1. 请求方法
    • GET : 请求中的参数包含在URL 里面,数据可以在URL 中看到,而POST 请求的URL 不会包
      含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
    • POST: 大多用于提交表单或上传文件,数据包含在请求体中
    • PUT:从客户端向服务器传送的数据取代指定文梢中的内容
    • HEAD:类似于GET 请求, 只不过返回的响应中没有具体的内容,用于获取报头
  2. 请求的网址
    • 请求的网址,即统一资惊定位符URL ,它可以唯一确定我们想请求的资源。
  3. 请求头:请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie 、Referer 、User-Agent 等。 下面简要说明一些常用的头信息
    • Accept :请求报头域,用于指定客户端可接受哪些类型的信息。
    • Accept-Language :指定客户端可接受的语言类型。
    • Accept-Encoding :指定客户端可接受的内容编码。
    • Host :用于指定请求资源的主机IP 和端口号,其内容为请求URL 的原始服务器或网关的位
      置。从HTTP 1. l 版本开始,请求必须包含此内容。
    • Cookie :也常用复数形式Cookies ,这是网站为了辨别用户进行会话跟踪而存储在用户本地
      的数据。它的主要功能是维持当前访问会话。
    • Referer :此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相
      应的处理,如做来源统计、防盗链处理等。
    • User-Agent :简称UA ,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统
      及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很
      可能会被识别州为爬虫。
    • Content-Type :也叫互联网媒体类型( Internet Media Type )或者MIME 类型,在HTTP 协议
      消息头中,它用来表示具体请求中的媒体类型信息。例如, text/html 代表HTML 格式,
      image/gif代表GIF 图片, app lication/json 代表JSON 类型,更多对应关系可以查看此对照表:
      http://tool.oschina.neνcommons 。
  4. 请求体:请求体-般承载的内容是POST 请求中的表单数据,而对于GET 请求,请求体则为空。
    • 此时需要注意Request Headers 中指定Co nte nt-Type 为application, x-www-form-urlencoded 。只有设置
      Content-Type 为application/x-www-form-urlencoded ,才会以表单数据的形式提交。另外,我们也可以
      将Co ntent-Type 设置为application/ison 来提交JSON 数据,或者设置为mu lti part/form-data 来上传文件

Response 中包含什么?

  1. 响应状态码
    • 响应状态码表示服务器的响应状态,如200 代表服务器正常响应, 404 代表页面未找到, 500 代表
      服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为200 ,则
      证明成功返回数据, 再进行进一步的处理,否则直接忽略。
    • 403 禁止访问 服务将拒绝此请求
    • 404 未找到 服务器找不到请求的网页
  2. 响应头:响应头包含了服务器对请求的应答信息,如Con tent-Type 、Server 、Set- Co oki e 等。
    • Date : 标识响应产生的时间。
    • Last-Modified : 指定资源的最后修改时间
    • Content-Encoding : 指定响应内容的编码。
    • Server : 包含服务器的信息,比如名称、版本号等。
    • Content-Type : 文档类型,指定返回的数据类型是什么,如text/html 代表返回HTML 文档,
      application/x- javascript 则 代表返回JavaScript 文件, image/jpeg 则代表返回图片。
    • Set-Cookie : 设置Cookies 。响应头中的Set- Cookie 告诉浏览器需要将此内容放在Cookies
      中, 下次请求携带Cookies 请求。
    • Expires: 指定响应的过期时间, 可以使代理服务器或浏览器将加载的内容更新到缓存巾。如
      果再次访问时,就可以直接从缓存中加载, 降低服务器负载,缩短加载时间。
  3. 响应体:最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体就 是网页的HTML 代码; 请求一张图片时, 它的响应体就是图片的二进制数据。我们做爬虫请求网页后, 要解析的内容就是响应体
    • 在浏览器开发者工具中点击Preview ,就可以看到网页的源代码, 也就是响应体的内容,它是解
      析的目标。
    • 在做爬虫时,我们主要通过响应体得到网页的源代码、JSON 数据等, 然后从中做相应内容的提取。

爬虫能抓怎样的数据?

  1. 网页文本:如HTML、JSON格式文本
  2. 图片:获取到的是二进制文件,保存为图片格式
  3. 视频:保存为视频格式即可
  4. 其他:只要是能请求到的,都能获取

怎样来解析数据?

  1. 直接处理
  2. JSON解析
  3. 正则表达式
  4. Beautiful Soup
  5. pyQuery
  6. XPath

为什么我抓到的数据和浏览器看到的不一样?

import requests
response = requests.get('http://m.weibo.com')
print(response.status_code)

with open('res.txt','w',encoding='utf-8') as f:
    f.write(response.text)
    f.close()
# 输入链接,拿到的只是浏览器数据中的第一个,而其他的数据是通过js发AJAX请求得到的数据,再对DOM进行从新渲染。才是看到的网页数据。

怎样解决js渲染的问题?

  1. 分享ajax请求
  2. selenium/webDriver驱动一个浏览器模拟加载网页
  3. splash
  4. PyV8、Ghost.py

如何保存数据

  1. 文本,纯文本、json、xml
  2. 关系型数据库
  3. 非关系型数据库
  4. 二进制文件 ,如图片视频音频等直接保存特定格式即可

你可能感兴趣的:(python,爬虫)