01-爬虫基础概念

什么是爬虫

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

Request 与 Response

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

Request

请求方式

主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等

GET 和POST 请求的区别
  • GET请求的参数都包含在请求的url中
  • POST请求的参数包含在 head 请求头中 在form date中
  • GET可以直接通过url进行请求
  • POST请求需要构造一个表单进行提交请求
  • POST 请求相对GET请求较安全
请求url

一般使用chrome浏览器的使用 使用f12 打开开发者模式
Network 中获取的请求 :
- 通常情况下第一个请求是一个 document类型的文档请求(里面包含整个页面的源代码)

也可以发现 网页在加载的过程中并不是一次性加载完成的,而是先依次请求最终显示一个完整的渲染后的页面。
首先得到document 文档,然后根据文档中的链接进行依次请求下载。

请求头

当作一个请求的配置信息
包含请求时的头部信息。(Request Headers) 如 User-Agent(指定浏览器请求头)、Host、Cookies(保持登录会话)

请求体

如果是GET请求的时候,我们并不需要请求体
而在POST请求的时候,请求体中包含了 类似于表单的key-value

Response

响应状态

status code

200 代表成功
301 代表页面跳转
404 代表页面丢失
502 代表服务器错误

响应头

如 内容类型、 内容长度、 服务器信息、 Cookie等信息

响应体

最主要的内容,包含了请求资源的内容,如网页HTML 、图片二进制数据等

import requests
response = requests.get('http://www.baidu.com')  # 完成了一个HTTp请求的发送
print(response.text) # 请求内容(源代码)

# 请求头
print(response.headers)
{'Server': 'bfe/1.0.8.18', 'Date': 'Mon, 12 Mar 2018 09:07:21 GMT', 'Content-Type': 'text/html', 'Last-Modified': 'Mon, 23 Jan 2017 13:27:36 GMT', 'Transfer-Encoding': 'chunked', 'Connection': 'Keep-Alive', 'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Pragma': 'no-cache', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Content-Encoding': 'gzip'}

# 状态码
print(response.status_code)
200

# 添加请求头
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
response = requests.get('http://www.baidu.com', headers=headers)
print(response.status_code)
200

爬虫可以抓到什么数据

  1. 网页文本
  2. 图片
  3. 视频
  4. 其他

解析方式

直接解析

Json解析

正则表达式

BeautifulSoup

PyQuery

Xpath

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

许多网页的内容是通过ajax和js 动态加载进来的,
而我们通过浏览器得到的源代码是 渲染加载后的内容,而使用python库请求的内容是最原始的html,并没有被渲染

怎么解决JavaScript渲染问题

分析Ajax请求
使用Selenium/WebDriver
Splash
PyV8、Ghost.py
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.taobao.com')

数据的存储

文本

  1. 纯文本
  2. Json
  3. Xml等

关系型数据库

具有结构化表结构的形式存储
1. MySQL
2. Oracle
3. SQL Server

非关系型数据库

Key-Value形式存储
1. MongoDB
2. Redis

二进制文件

  1. 图片
  2. 视频
  3. 音频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值