1.爬虫
没有数据的公司,
爬取有数据的网站的数据,去做分析
咨询公司购买 (咨询公司数据,爬虫获取)
2.应用场景参考信息
----好的方向
(1).新浪微博 微指数
热词趋势
(2).百度新闻
链接外网.
不是自己生成新闻,百度收录(爬虫)
(3).呈现数据或使用链接
音乐软件
(4).数据分析
----坏的方向
(5).12306抢票
过去爬信息,现在有验证码,一样有方法爬
(6).网站上投票
程序投票,刷票
(7).短信轰炸
多网站,利用网站服务器对接的短信猫发送短信
3.爬虫定义
网络爬虫(网页蜘蛛,网络机器人),模拟可回答发送网络请求,接收请求响应,一种按照一定的规则,自动抓取网络信息的程序、
只要浏览器能做的事情,原则上,爬虫都能做。
二、爬虫的分类和robots
1.爬虫的分类
通用爬虫:搜索引擎爬虫(雅虎、百度、谷歌)
工作原理:爬取+分词处理
聚焦爬虫:
工作原理:特定Url+信息存储
2.怎么爬
(1).爬哪些网站url地址
(2).提取数据信息
(3).数据持久化
3.爬取后续
通用引擎:分词--检索
4.Robots协议(道德上协议)
网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
例如:https://www.taobao.com/robots.txt
User-agent 浏览器身份标识 (用户代理)
三、Http和Https
http
超文本传输协议
默认端口:80
https
http+ssl(安全套接字层) 加密和解密
默认端口:443
https比http更安全,但是性能更低
四、请求说明
1.页面呈现有渲染过程
url的形式
scheme:协议(例如:http,https,ftp)
host:服务器的IP地址或者域名
port:服务器的端口(如果是走协议默认端口80或者443)
path:访问资源的路径
query-string:参数,发送http服务器的数据
anchor:锚(跳转到网页的指定锚点位置)
http://localthost:4000/file/part01/1.hecore.html
http://item.jd.com/11232138.html#product-detail
说明 #可用于前端路由的方式,此处用于定位。
Request Header
GET/HTTP/1.1
Connection: keep-alive 保持连接
Upgrade-Insecure-Requests:1 -->1 true 0 false
Cache-Control: max-age=0 -->0不缓存
User-Agent: 用户代理(百度不同显示-->PC/MAC/Iphone)
Accept:接收数据的类型
Accept-Encoding: gzip(图片压缩丢失信息)
Cookie-->客户端缓存。
Refere(页面跳转处)
x-requested-with:XMLHttpRequest(Ajax异步请求)
2.常见请求方法
GET|POST PUT|DELETE 名义上的请求
GET携带参数大小有限
3.响应状态码
200 30x 40x 50x
4.Response Headers
五、爬虫语言
Java(核心多种方式),Python(核心借助requests库,后续有很多框架) 本次教程采用原生开发,框架开发后续补充。
六、Python爬虫基础铺垫
编译器选择PyCharm
1.str类型和bytes类
bytes:二进制
互联网上数据都是以二进制方式传输的
str: unicode的呈现方式。
中文3个字符。
2.str bytes转换(python习惯使用方法的方式去转换类型)
str使用encode转换未bytes
bytes通过decode转换为str
注意:编码和解码方式需要一致,否则乱码。
b'\xe4\xbc' bytes类型。
3.requests库使用
作用:发送网络请求,返回响应数据
中文文档API:http://docs.python-requests.org/zh_CN/latest/index.html
应该用场景:使用requests发送网络请求。
import requestsrequests.get("http://www.baidu.com")<Response [200]>r=requests.get("http://www.baidu.com")type(r)<class 'requests.models.Response'>
查看方法 输入 r. 按键盘tab
获取html代码方式
(1).利用r.text
r.text text为r的属性
查看解码方式
r.encoding 'ISO-8859-1' 根据响应的头部的推测
r.encoding = "utf-8" 指定编码方式
(2).利用r.content
r.content 获取的是bytes类型的(二进制数据)
r.content.decode() 转为str类型的
基本代码
import requests
response=requests.get("http://www.baidu,com")
response.encoding="utf-8" #指定response.text的编解码方式
print(response.text) #使用response,text来获取网页的html的字符串(str)
print(response.content.content.decode()) #response.content是一个byte类型的字符串。
f= open ("baidu.png","wb") #wb方式写入
f.write(r.content)
f.close