一、 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)