爬虫定义
爬虫(spider):是用脚本代替浏览器请求服务器获取服务器资源的程序。(python爬虫优势,支持模块很多,有scrapy非常强大的爬虫框架)
爬虫分类
1.通用爬虫
1)实例:百度等搜索引擎
2)功能:访问网页 --> 抓取数据 --> 数据存储 --> 数据处理 --> 提供检索服务
3)爬取流程:
① 给定一些起始的url,放入待爬取队列
② 从队列中获取url对象,开始爬取数据
③ 分析网页,获取网页内所有url,入队,继续重复执行第二步
2.聚焦爬虫
1)功能:根据需求,实现爬虫程序,抓取需要的数据
2)设计思路:
① 确定要爬取的url
② 模拟浏览器通过http协议访问url,获取服务器返回的html代码
③ 解析html字符串(根据一定的规则提取需要的数据)
使用python库(urllib模块)
from urllib import request
① urllib.request.urlopen(url):打开url,返回一个response对象
② response常用方法:read()、readline()、readlines()、getcode()、geturl()、getheaders()
# coding:utf-8
from urllib import request
res = request.urlopen("https://www.baidu.com/")
print(res.read()) # 返回一个二进制数据
print(res.read().decode()) # 解码显示百度页面源码
print(res.geturl()) # 请求的url
print(res.getheaders()) # 返回响应头
print(res.getcode()) # 返回状态码
③ urllib.request.urlretrieve() :请求网页、图片、视频
# coding:utf-8
from urllib import request
# url为图片地址,会将图片下载在当前路径下并命名为cat.jpg
url = "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1567754197&di=3c8987357c27e334ce8e565524a2badf&src=http://n.sinaimg.cn/sinacn12/275/w640h435/20180806/7562-hhhczfc3896460.jpg"
res = request.urlretrieve(url,"cat.jpg")
打开图片
# coding:utf-8
from urllib import request
# url为视频地址,会将视频下载在当前路径并命名为zjl.mp4
url = "https://vd2.bdstatic.com/mda-ji2k1egrakc2yraf/sc/mda-ji2k1egrakc2yraf.mp4?auth_key=1567757266-0-0-352d0aa60522101452bc7c1816d745b2&bcevod_channel=searchbox_feed&pd=bjh&abtest=all"
res = request.urlretrieve(url,"zjl.mp4")
打开视频保存目录,视频下载完成,正常播放
④ urllib.parse(python自带,需要传入一个字典,parse.urlencode(字典数据))
# coding:utf-8 from urllib import request,parse base_url = "http://tieba.baidu.com/f?&pn=%s" source = { "kw":"王俊凯" } headers = { "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36" } # 解析url,请求中有中文的时候需要编码一下再请求 url1 = parse.urlencode(source) # source为字典 print(url1) # url1为:kw=%E7%8E%8B%E4%BF%8A%E5%87%AF for i in range(1,6): pn = (i-1)*50 # 拼接每一页url url = base_url%pn + url1 # print(url) # 对每一页构造请求并发送请求 req = request.Request(url=url,headers=headers) response = request.urlopen(req) print(response.getcode())
解析内容
正则表达式
xpath
bs4
jsonpath
反爬虫的一些手段
User-Agent
代理IP(西刺代理)
验证码访问(打码平台)
动态加载网页
数据加密(分析js代码)
爬虫-反爬虫-反反爬虫
爬虫的流程
1)分析业务需求、分析出你需要的数据、数据量、周期
2)建模,根据需求,创建数据库,用数据库表、表字段、表关联来描述业务之间的联系
3)分析爬取的路径、html结构、数据传输