一、 jupyter的使用
- 1 jupyter的安装
  - pip install jupyter

- 2 jupyter的使用
  - 创建txt/文件夹/终端/python3

- 3 jupyter的快捷键

  1.   创建: a或b
  2.    删除l:dd
  3.   使用tab补全
  4.   执行l: shift+enter
  5.   代码或markdown模式切换: y或m
  6.   查看帮助信息: 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)