zoukankan      html  css  js  c++  java
  • 第二十四节课:requests爬虫实战

    # 第二十四节课:requests爬虫实战
    '''
    本节课大纲:
    1- 爬虫的概述
    2- 爬虫实操流程
    3- 实战操作
    '''
    # 1- 爬虫的概述
    # 我们了解的网络爬虫是什么?  ------爬取数据
    # 用户获取网络数据的方式:浏览器提交请求-->下载网页代码-->解析/渲染成页面
    # 爬虫流程:模拟浏览器发送请求-->下载网页代码-->只提取有用的数据-->存放于数据库或者文件中
    # 网络爬虫:想网站发起请求,获取资源后分析并提取有用数据的程序
    # 网络爬虫的作用:信息时代,数据可以创造财富
    # 互联网中最有价值的便是数据,比如天猫商城的商品信息,链家网的租房信息等等,这些数据都代表了各行各业的真金白银
    
    # 2- 爬虫操作流程
    # 很简单 Python(用于构造编辑请求)+requests(用这个库区发送和解析请求)+excel(存数据) 就可以实现爬虫
    # 1、模拟浏览器发送请求
    # 2、下载网页代码
    # 3、只提取有用的数据
    # 4、存放于数据库或者文件中
    # 实例:
    import requests,re
    ''' 
    反扒机制:
        1- 判别是否是浏览器--后果:报错远程主机强迫关闭了一个现有链接--解决方案:模拟浏览器
        2- 验证码 拖拽或者输入
        3- 封IP
        4- 封账号
    '''
    user_header = {'User-Agent':'Baiduspider'}
    # 1 使用requests构建请求
    web_usl='https://search.51job.com/list/000000,000000,0000,00,9,07,%25E8%25BD%25AF%25E4%25BB%25B6%25E6%25B5%258B%25E8%25AF%2595%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare='
    resp = requests.get(web_usl,headers = user_header)  #如果有反扒机制,就在括号里面加上headers,即写作:resp = requests.get(web_usl,headers =user_header)
    # 2 获取响应数据
    # print(resp.text)    #打印出来有超级多的代码
    # 3 提取有效数据
    '''
    <div class="e ">
                    <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
                    <input class="checkbox" type="checkbox" name="delivery_jobid" value="124737128" style="display:none" jt="0">
                    <p class="info"><span class="title"><a title="网络优化工程师-技术类(重庆)" target="_blank" href="https://jobs.51job.com/chongqing/124737128.html?s=02">网络优化工程师-技术类(重庆)</a></span><a title="移动设计院重庆分公司" target="_blank" class="name" href="https://jobs.51job.com/chongqing/co6028494.html">移动设计院重庆分公司</a><span class="location name">重庆</span><span class="location"></span><span class="time">12-06</span></p>
                    <p class="order">学历要求:本科<span>|</span>工作经验:<span>|</span>公司性质:国企<span>|</span>公司规模:</p>
                    # <p class="text" title="学历要求:本科及以上专业要求:通信工程类、计算机软件类岗位职责:从事通信网络优化相关工作:1、对移动通信网络进行各类专项优化,解决网络中存在的问题;2、使用各类优化工具平台进行数据处理、分析,编制相应材料;3、网络优化项目对应小工具、小平台的软件需求整理、软件开发工作。任职资格:1、掌握本专业的基础知识;2、熟练应用计算机以及office等应用软件;3、具备良好的语言、文字表达能力以及较好的沟通协调能力;4、能吃苦耐劳。">学历要求:本科及以上专业要求:通信工程类、计算机软件类岗位职责:从事通信网络优化相关工作:1、对移动通信网络进行各类专项优化,解决网络中存在的问题;2、使用各类优化工具平台进行数据处理、分析,编制相应材料;3、网络优化项目对应小工具、小平台的软件需求整理、软件开发工作。任职资格:1、掌握本专业的基础知识;2、熟练应用计算机以及office等应用软件;3、具备良好的语言、文字表达能力以及较好的沟通协调能力;4、能吃苦耐劳。</p>
                    # <p class="opat">
                        <input value="124737128" name="hidJobID124737128" id="hidJobID124737128" type="hidden" jt="0">
                        <a class="sq sicon Dm" href="javascript:void(0);" onclick="delivery('hidJobID124737128', '1', '//i.51job.com', 'c', 'jobs.51job.com', '02', '02', '//img03.51jobcdn.com');return false;">立即申请</a><br><a class="sc sicon Dm" href="javascript:void(0);" onclick="saveCollection('124737128');">收藏</a>
                    </p>
                </div>
    '''
    # 这里需要提取数据,用正则表达式,导入re
    lines = re.findall('<div class="e">(.*?)</div>',resp.text,re.S)  #返回的是列表信息.现在打印出来是空的.加上参数re.S只抓取有元素的行
    #########获取每一行具体数据
    for line in lines:
        #1- 获取岗位名称
        temp = re.findall('class="info"><span class="title"><a title="(.*?)"href=',line,re.S)
        #2- 获取公司名称
        #3- 获取地址
        #4- 获取薪资
        #5- 获取发布时间
        print(temp)
    # 4 存储Excel
  • 相关阅读:
    Angular相关UI框架的安装
    Visual Studio Code 编辑器常用插件
    Groovy特性
    Notification(Android)消息推送机制
    Sublime SVN插件使用方法 PS:翻出来的旧笔记,现在Sublime和svn用的都不多了
    Python基本语法练习笔记(一)
    首篇博文占坑
    apache2修改用户和组
    如何修改script.bin/script.fex
    perl的INC设置
  • 原文地址:https://www.cnblogs.com/66-liu/p/14090211.html
Copyright © 2011-2022 走看看