python爬虫之基础内容
请求
Request:请求
请求方式:主要有GET和POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等
请求URL:资源定位符
请求头:请求时的头部信息,如User-Agert、Host、Cookies等信息
请求体:请求的额外携带的数据,如表单提交时的表单数据
响应
response:响应
响应状态:有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误等
响应头:如内容类型、内容长度、服务器信息、设置Cookie等等
响应体:最主要的内容,包含请求的源代码,由浏览器解析为页面
抓取数据类型
网页文本:如HTML文档、json格式文本等
图片:二进制文件,保存为图片格式
视频:二进制文件,保存为视频格式
其他:只要是能请求到的,都能获取
解析方式
直接处理、json解析、正则表达式、BeautifulSoup、PyQuery、XPath
为什么我抓到的数据和浏览器看到的是不一样的呢?因为有JavaScript渲染导致的。
怎么解决JavaScript渲染?
1.分析Ajax请求,返回json字符串
2.Selenium/WebDriver,驱动浏览器加载网页
3.Splash,模拟JavaScript渲染
4.PyV8、Ghost.py模拟加载
保存数据
文本:纯文本、json、xml等
关系型数据库:MySQL、oracle、sql server等
非关系型数据库:MongoDB、Redis等keyvalue形式存储
二进制文件:图片、视频等文件
常用库
urllib:提供了一系列用于操作URL的功能。
re:正则表达式
requests:基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库
selenium:针对web应用的开源测试框架,驱动各种浏览器
chromedriver:chrome浏览器
phantomjs:无界面浏览器
lxml:提供解析和生成xml的方式
pyquery:网页解析库
pymysql:mysql数据交互
pymongo:MongoDB数据交互
redis:redis数据交互
flask: web 框架,提供工具,库和技术来允许构建一个 web 应用程序
django:Web应用框架,后台管理
jupyter:网页端代码操作
ps:
python爬虫,刚开始主要用urllib库,接口比较繁琐,但也能实现基本功能。requests库基于urllib库,威力更强大,但对一些动态加载的网站,经常要先分析请求,再用requests模拟,比较麻烦。selenium库是python的一个第三方自动化测试库,虽然是测试库,却也非常适合用来写爬虫,可以直接模拟浏览器动作,而phantomJS是其子包webdriver下面的一个浏览器。phantomJS本身是一个无头浏览器(headless browser),也称无界面浏览器。可以在通过官网下载运行phantomjs.exe,简单几行代码也能访问网页,爬取数据。