jupyter基本使用:
在某一路径下,直接打开命令窗口--快捷键:shift +右击, 选择命令窗口
快捷键
-
- 插入cell:a b
- 删除cell:x
- 切换cell的模式:m y
- 执行cell:shift+enter
- tab:自动补全
- shift+tab:打开帮助文档
爬虫理论:
- 什么是爬虫
- 通过编写程序,模拟浏览器上网,让其去互联网上获取数据的过程
- 爬虫的分类
- 通用爬虫:获取一整张页面数据 ----搜索引擎比较多--抓取系统(内部封装的强大的爬取功能)
- 聚焦爬虫:根据指定的需求获取页面中指定的局部数据
- 增量式爬虫:用来监测网站数据更新的情况。爬取网站最新更新出来的数据。
- 反爬机制:网站可以采取先关的技术手段或者策略阻止爬虫程序进行网站数据的爬取
- 反反爬策略:让爬虫程序通过破击反爬机制获取数据
- robots协议:防君子不妨小人
- 首先是一种反扒协议机制,一定是用在门户网站中的;
- 规定哪些数据能爬,哪些数据不能爬;
-
- 例如淘宝___https://www.taobao.com/robots
-
- http协议:client和Server进行数据交互的形式
- 使用到的头信息:
- User-Agent:请求载体的身份标识 (请求载体:(1)网页;(2)request模块/爬虫程序)
- Connection:'close' (keep alive)当请求发送成功后,如果设置为close,会马上立刻断开连接;(keep alive)会断开,不会马上断开
- content-type:服务端返回客户端的数据类型或数据格式,text/json
- https:安全的http协议
- 对称秘钥加密:秘钥和密文一起发给服务端 https://www.cnblogs.com/bobo-zhang/p/9645715.html 一起发送,存在安全隐患
- 非对称秘钥加密:秘钥和密文分离,由服务端制定加密规则,发出公钥,客户端加密后的密文发送到服务端,用私钥进行解密; 处理复杂,效率低! 影响通讯效率和速度;隐患:不能保证客户端拿到的公钥一定是由指定服务端发送的.
- 证书秘钥加密:相当于给公钥一个防伪标识;
requests模块
- pip install requests
- 作用:就是用来模拟浏览器上网的。
- 特点:简单,高效
- old:urllib
- requests模块的使用流程:
- 指定url
- 发起请求
- 获取响应数据
- 持久化存储
例子:
- 处理get请求的参数
- 需求:网页采集器
- 反爬机制:UA检测
- 反反爬策略:UA伪装
#爬取搜狗首页的页面数据 import requests #1指定url url = 'https://www.sogou.com/' #2.发起请求 response = requests.get(url=url) #3获取响应数据 page_text = response.text #text返回的是字符串类型的数据 #持久化存储 with open('./sogou.html','w',encoding='utf-8') as fp: fp.write(page_text) print('over!'
import requests wd = input('enter a word:') url = 'https://www.sogou.com/web' #参数的封装 param = { 'query':wd } #UA伪装 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' } response = requests.get(url=url,params=param,headers=headers) #手动修改响应数据的编码 response.encoding = 'utf-8' page_text = response.text fileName = wd + '.html' with open(fileName,'w',encoding='utf-8') as fp: fp.write(page_text) print(fileName,'爬取成功!!!')
#破解百度翻译 url = 'https://fanyi.baidu.com/sug' word = input('enter a English word:') #请求参数的封装 data = { 'kw':word } #UA伪装 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' } response = requests.post(url=url,data=data,headers=headers) #text:字符串 json():对象 obj_json = response.json() print(obj_json)
#爬取任意城市对应的肯德基餐厅的位置信息 #动态加载的数据 city = input('enter a cityName:') url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' data = { "cname": "", "pid": "", "keyword": city, "pageIndex": "2", "pageSize": "10", } #UA伪装 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' } response = requests.post(url=url,headers=headers,data=data) json_text = response.text print(json_text)