一、 jupyter的使用
- 1 jupyter的安装
- pip install jupyter
- 2 jupyter的使用
- 创建txt/文件夹/终端/python3
- 3 jupyter的快捷键
- 创建: a或b
- 删除l:dd
- 使用tab补全
- 执行l: shift+enter
- 代码或markdown模式切换: y或m
- 查看帮助信息: shift+tab"
二、爬虫
1、爬虫的概念:
通过编写程序模拟浏览器操作,让其在互联网上爬取/获取数据的过程
2、爬虫的分类:
a、通用爬虫: 获取一整张页面的数据(是浏览器"抓取系统"的一个重要组成部分)
b、聚焦爬虫:爬取页面中指定的内容(必须建立在通用爬虫的基础上)
c、增量式爬虫: 通过监测网站数据的更新情况, 只爬取最新的数据
三、反爬机制: 通过技术手段阻止爬虫程序进行数据的爬取(大概7种)
1、反反爬策略:
破解反爬机制的过程
request(请求头信息)
User-Agent: 请求载体的身份标识
connection: close 每当访问完数据之后就立即断开
response(响应头信息)
content-type: 服务器的响应数据类型
爬虫的合法性
咱们做爬虫必须要合法
robots协议(文本协议robots.txt)
协议: 服务器与客户端之间制定的一个规则
- HTTP/HTTPS
四、数据加密的方式:
1、对称密钥加密: 客户端对请求数据进行加密,将加密信息和密钥一并发送给服务器端
2、 非对称密钥加密: 服务端创建密钥对,将公钥发送给客户端,客户端使用公钥对数据进行加密,服务器端用私钥进行解密
3、 证书密钥加密: 服务器端发送给客户端的公钥,进行第三方机构(权威)进行认证,没有认证的公钥,客户端拒接"
request模块
-request模块概念:模拟浏览器发送请求
-安装 -pip3 install requests -requests模块的使用 -import requests -爬虫requests模块的使用流程: -1、指定URL -2、发送请求 -3、获取响应数据 -4、持久化存储 -反爬机制: -robots协议 -响应对象乱码 -User-Agent检测 -反反爬策略: -为了学习,工作忽视 -指定编码:response.encoding='utf-8' -UA伪装
五,代码实现
1、爬取搜狗页面的源码数据
# 爬取搜狗首页的页面源码数据 import requests # 1、指定URL url = 'https://www.sogou.com/' # 2、发送请求 reponse = requests.get(url=url) # 3、获取响应数据(text获取文本数据,content获取二进制数据,json获取json序列化数据) # print(reponse.text) data = reponse.text # 4、持久化存储 with open('sogou2.html','w',encoding='utf-8') as f: f.write(data)
2、爬取搜狗指定词条搜索后的页面数据
# 需求:爬取搜狗指定词条搜索后的页面数据 import requests name=input('请输入一个名字:') # 1、指定url url="https://www.sogou.com/web" p = { "query": name } # 2、发送请求 response = requests.get(url=url,parms=p) response.encoding='utf-8' # 处理响应对象乱码 (反爬机制二) # 3、获取响应 page_text=response.text # 4、持久化存储 with open(name+'2.html','w',encoding='utf-8') as f: f.write(page_text)
3、爬取搜狗指定词条搜索后的页面数据 (反爬机制的解决方案)
import requests name=input('请输入一个名字:') # 1、指定url url="https://www.sogou.com/web" params = { "query": name } headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" } # 2、发送请求 response = requests.get(url=url,params=params,headers=headers) response.encoding='utf-8' # 处理响应对象乱码 # 3、获取响应 page_text=response.text # 4、持久化存储 with open(name+'.html','w',encoding='utf-8') as f: f.write(page_text)
4、破解百度翻译
# 破解百度翻译 # 注意:以后我们在写爬虫程序时,必须先查看此网站的数据是否ajax的请求 # 如果不是,则可以直接使用url,如果是,那就需要分析数据包来获取 import requests name = input(">>>:") # 1、指定url url = "https://fanyi.baidu.com/sug" from_data = { "kw": name } headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" } # 2 发送请求 # 在发送get请求时,发送的参数时params,在post请求中,参数是data. response = requests.post(url=url,data=from_data,headers=headers) # 3 获取响应 page_json = response.json() # 4 持久化存储 print(page_json)
5、爬取豆瓣电影分类排行榜中电影详情数据
import requests # 1、指定url url = "https://movie.douban.com/j/chart/top_list/" params = { "type":"24", "interval_id":"100:90", "action":"", "start":"0", "limit":"50" } headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" } # 2、3 response = requests.get(url=url,headers=headers,params=params) response.encoding='utf-8' # 处理响应对象乱码 page_json = response.json() # 4 print(page_json) # print(len(page_json)) # with open('movie.html','w',encoding='utf-8') as f: # f.write(response.text)
6、爬取坑德基餐厅查询中指定地点的餐厅数据
#需求:爬取坑德基餐厅查询中指定地点的餐厅数据 # 分析: # 1、此页面的餐厅数据是通过Ajax发送请求动态加载获取到的 # 2、响应数据类型是text,并不是文本数据,有可能也是json数据,需要我们来查看数据包中的request栏中的数据来确定 # 只要是列表或字典类型的数据,就都是json数据 import requests name = input(">>>:") # 1 url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword" lst=list() for i in range(1,9): from_data = { "cname": "", "pid": "", "keyword": name, "pageIndex": i, "pageSize": "10" } headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" } # 2 response = requests.post(url=url,data=from_data,headers=headers) # print(response) # 3 获取响应 page_json = response.json() lst.append(page_json) # 4 持久化存储 print(lst)
7、爬取国家药品监督管理总局中基于化妆品生产许可证相关数据
#需求:爬取国家药品监督管理总局中基于化妆品生产许可证相关数据 # 分析: #1、首页的列表数据是通过Ajax动态加载获取到的 #2、模拟ajax数据包发送请求,就可以获取到一个json数据,这个json数据里面包含有一个重要的数据(ID) #3、详情页里面的数据也是通过ajax动态获取到的 # 4、向http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById发送请求,携带ID参数就可以获取详情页的企业参数 import requests home_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList" detail_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById" headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" } # 获取首页列表页的企业信息里面的ID数据,封装到id_list里面 id_list= list() for i in range(1,8): form_data = { "on": "true", "page": i, "pageSize": "15", "productName": "", "conditionType": "1", "applyname": "", "applysn": "", } page_json = requests.post(url=home_url,headers=headers,data=form_data).json() # print(page_json) for page in page_json["list"]: ids = page["ID"] id_list.append(ids) # print(id_list) # 拿到数据ID列表之后,就需要向详情页的url发送请求,获取企业详情页数据 all_data_list = list() for ids in id_list: data = { "id": ids } # 向详情页的url发送请求 detail_json = requests.post(url=detail_url,headers=headers,data=data).json() all_data_list.append(detail_json) print(all_data_list)