zoukankan      html  css  js  c++  java
  • 爬虫基础1-jupyter的安装使用,以及requests的基本用法

    一、 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)
  • 相关阅读:
    Mysql的左外连接丶右外连接与内连接的区别
    常见的异常种类
    Mysql
    JSTL 标签库
    VMware的虚拟机为什么ip地址老是自动变化?
    redis出现的问题
    在Linux系统下启动了tomcat,但是在游览器中进步了服务
    Linux下安装JDK 与 tomcat
    wamp配置多站点域名
    终端链接操作redis
  • 原文地址:https://www.cnblogs.com/youhongliang/p/12172984.html
Copyright © 2011-2022 走看看