数据采集之爬虫
【内容简介】
- 什么是爬虫?
- 静态网页与静态网页的区别
- python爬取技术学习
【知识点讲解】
1.什么是爬虫?
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者);它是一种按照一定的规则,自动地抓取网络信息的程序或者脚本。
(1)爬虫步骤
(2)爬虫三要素
网页抓取
页面内容抓取工具 : 正则、lxml、bs4(BeautifulSoup)
使用http库向目标站点发起请求(常见的请求方式:GET/POST),即发送一个Request,Request包含:请求头、请求体等
Request模块缺陷:不能执行JS 和CSS 代码
网页解析
解析 html 数据:解析 html 数据方法有使用正则表达式、第三方解析库如 Beautifulsoup,pyquery 等
解析 json 数据:解析 json数据可使用 json 模块
解析二进制数据:以 b 的方式写入文件
数据存储
存储库:文件,MySQL,Mongodb,Redis
(3) 爬虫注意事项
1.遵守 Robots 协议,但有没有 Robots 都不代表可以随便爬;
2.限制你的爬虫行为,禁止近乎 DDOS 的请求频率,一旦造成服务器瘫痪,约等于网络攻击;
3.对于明显反爬,或者正常情况不能到达的页面不能强行突破,否则是 Hacker 行为;
4.最后,审视清楚自己爬的内容,遵守国家相关法律法规,以下是绝不能碰的红线(包括但不限于):
•爬取用户个人数据非法牟利,包括模拟登录他人账号。
•爬取商业数据造成不正当竞争。
•爬取大量带有知识产权的数据用于商业目的, 获取盈利行为。
5、不得违反相应法律法规。
2. 静态网页和动态网页的区分
在静态web程序中,客户端使用web浏览器(IE.FireFox等)经过网络(Network)连接到数据服务器上,使用HTTP协议发起一个请求(Requests),告诉服务器我现在需要得到哪个页面,所有的请求交给web服务器,之后Web服务器根据用户的需求,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过web服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。
静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。编的是什么它显示的就是什么、不会有任何改变
*如果客户端请求的是动态资源(*.jsp. .asp/.aspx. .php),则先将请求交给WEB container中连接数据库,从数据库中取出数据等一系列操作后动态拼凑页面展示内容,拼凑页面的展示内容后,把所有的展示内容交给WEB服务器,之后通过WEB服务器将内容发送回客户端浏览器进行解析执行。
对于网络爬虫来说,静态网页的内容都写在源代码中,比较容易抓取;动态网页的内容不一写在网页源代码中,可能需要用户登录后才能显示完整,这增加了抓取难度。
3. python爬取技术学习
(1) 网页抓取库Urllib
urllib库是Python内置的HTTP请求库,它可以看做是处理URL的组件集合。urllib库包含了四大模块,具体如下:
urllib.request:请求模块
urllib.error:异常处理模块
urllib.parse:URL解析模块
urllib.robotparser:robots.txt解析模块
使用方法:
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
url:url 地址。
data:发送到服务器的其他数据对象,默认为 None。
timeout:设置访问超时时间。
cafile 和 capath:cafile 为 CA 证书, capath 为 CA 证书的路径,使用 HTTPS 需要用到。
cadefault:已经被弃用。
context:ssl.SSLContext类型,用来指定 SSL 设置。
(2) 网页解析库Beautifulsoup
BeautifulSoup 安装
pip install BeautifulSoup4
BeautifulSoup 使用
首先是导入BeautifulSoup库(from bs4 import BeautifulSoup),然后将html源码解析为BeautifulSoup对象,最后提取数据。