# 第二十四节课: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°reefrom=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