什么是爬虫
- 请求网站并提取数据的自动化程序
Request 与 Response
- 浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request
- 服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response.
- 浏览器收到服务器的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
爬虫可以抓到什么数据
- 网页文本
- 图片
- 视频
- 其他
解析方式
直接解析
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')
数据的存储
文本
- 纯文本
- Json
- Xml等
关系型数据库
具有结构化表结构的形式存储
1. MySQL
2. Oracle
3. SQL Server
非关系型数据库
Key-Value形式存储
1. MongoDB
2. Redis
二进制文件
- 图片
- 视频
- 音频