继续研究爬网页,这次的网站是https://www.yuanjisong.com/job/shanghai
这是一个纯静态的网页,请求方式是get,所以直接使用request模块就行了。

每个任务的相关html代码如下

<div class="weui_panel weui_panel_access weui_panel_access_adapt db_adapt margin-top-2 "><a href="https://www.yuanjisong.com/job/104128" target="_blank"><div class="weui_panel_hd weui_panel_hd_adapt media_desc_adapt_url"><div class="topic_title">系统二次开发</div></div></a><div class="job_list_item_div"><div class="weui_panel_bd "><div class="weui_media_box weui_media_text media_box_adapt"><a href="https://www.yuanjisong.com/job/104128" class="media_desc_content_adapt" target="_blank"><p class="media_desc_adapt "><span class="glyphicon glyphicon-th-large" aria-hidden="true"></span><span class="job_list_item_title ">描述:</span>在系统基础上增加新模块。具体需求加附件QQ我发给你。要求1. 3年以上**********MVC 开发经验;; 2. 至少掌握一种SQL关系型数据库(mysql或sqlserver); 3. 熟练掌握EasyUI、HTML、CSS、JavaScript、jQuery、AJAX、JSON等Web前端技术; 4. 使用Redis、MongoDB参与过实际项目的优先考虑<!--  <span class="more_text">详情...</span> --></p></a></div></div><div class="weui_panel_bd" ><a href="https://www.yuanjisong.com/employer/134659" class="weui_media_box weui_media_appmsg" target="_blank"><div class="weui_media_hd weui_media_hd_adapt"><img class="weui_media_appmsg_thumb radius_img_50" src="/Webpage/Job/../../Public/Img/Avatar/a1.jpg" alt="you" /></div><div class="weui_media_bd"><h4 class="weui_media_title font-color-3">you<!-- <span class="time_span">2019-11-09 17:46</span>--></h4></div></a></div><div class="weui_panel_bd"><div class="weui_media_box weui_media_text media_box_adapt"><p class="media_desc_adapt"><span class="glyphicon glyphicon-hourglass" aria-hidden="true"></span><span class="job_list_item_title ">工时:</span><span>4<span class="margin-left-1">天<span></span></p></div></div><div class="weui_panel_bd"><div class="weui_media_box weui_media_text media_box_adapt"><p class="media_desc_adapt"><span class="glyphicon glyphicon-yen" aria-hidden="true"></span><span class="job_list_item_title ">总价:</span><span class="rixin-text-jobs">2000<span class="margin-left-1">元<span></span></p></div></div></div><div class="weui_panel_bd appoint_div"><a  href="javascript:void(0);" data-jobid="104155" id="appoint_job_104155" class="weui_btn weui_btn_plain_primary vertical_a_m margin_left_17 appoint_confirm"   >投递职位</a>                 <span class="zhushi_span vertical_a_m">已有<i id="i_post_num_104155" class="i_post_num">17</i>人投递</span></div></div>

分析一下,可以得到每个任务包含的信息

  • 任务名称
  • 内容
  • 委托人
  • 工时,单位
  • 报酬,单位
  • 状态(可以投递,或者已完成)

要想得到以上信息,可以采用正则

 reg = re.compile(r'<div class="topic_title">(.*?)</div></div></a>'+'.*?<span class="job_list_item_title ">.*?</span>(.*?)<!--'+'.*?<h4 class="weui_media_title font-color-3">(.*?)<!--'+'.*?<span class="job_list_item_title ">.*?<span>(.*?)<span class="margin-left-1">(.*?)<span>'+'.*?<span class="rixin-text-jobs">(.*?)<span class="margin-left-1">(.*?)<span>'+'.*?margin_left_17.*?>(.*?)</a>',re.S)

关于页码的html代码如下

<ul class="pagination pagination_webpage"><li class="disabled"><span >上一页 <span class="sr-only">(current)</span></span></li><li class="disabled"><span <span aria-hidden="true">首页</span></span></li>              <li class="active"><span>1 <span class="sr-only">(current)</span></span></li><li class=""><a href="https://www.yuanjisong.com/job/shanghai/page2">2 <span class="sr-only">(current)</span></a></li>                              <li class=""><a href="https://www.yuanjisong.com/job/shanghai/page3">3 <span class="sr-only">(current)</span></a></li>                             <li class=""><a href="https://www.yuanjisong.com/job/shanghai/page4">4 <span class="sr-only">(current)</span></a></li>                             <li class=""><a href="https://www.yuanjisong.com/job/shanghai/page5">5 <span class="sr-only">(current)</span></a></li>                     <li class=""><a href="https://www.yuanjisong.com/job/shanghai/page2">下一页 <span class="sr-only">(current)</span></a></li>
</ul>

解决翻页的思路
step1.初始页page=1。
step2.开始循环,拼接页码https://www.yuanjisong.com/job/shanghai/page1
step3.获得上面html中所有链接中倒数第二个的文字,应该是5(current)
step4.通过正则获得其中的数字5
step5.和当前page比较,如果相等,退出循环。如果大于,那么page=page+1

找出最大页码对应数字的正则代码如下

get_page = soup.find('ul', attrs={'class': 'pagination pagination_webpage'}).find_all('a')
max_page = re.findall(r'\d+', get_page[-2].getText())  #最大一页是所有链接中倒数第二个。文本为:5 (current)。所以用正则找出数字

保存到excel

保存excel时候如果报错如下

 File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 2127, in to_excelengine=engine)File "C:\Python27\lib\site-packages\pandas\io\formats\excel.py", line 662, in writefreeze_panes=freeze_panes)File "C:\Python27\lib\site-packages\pandas\io\excel.py", line 1605, in write_cellsxcell.value, fmt = self._value_with_fmt(cell.val)File "C:\Python27\lib\site-packages\openpyxl\cell\cell.py", line 272, in valueself._bind_value(value)File "C:\Python27\lib\site-packages\openpyxl\cell\cell.py", line 229, in _bind_valuevalue = self.check_string(value)File "C:\Python27\lib\site-packages\openpyxl\cell\cell.py", line 186, in check_stringraise IllegalCharacterError
openpyxl.utils.exceptions.IllegalCharacterError

可以在保存时候加入engine=‘xlsxwriter’
具体原因参见https://blog.csdn.net/javajiawei/article/details/97147219
其实定义在cell.py文件中有了,也就是我们保存的文件中出现了以下正则中的字符,这是不符合要求的。

ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]')

解决办法要么手工替换,要是使用xlsxwriter。

源码下载

2019-12-6 爬网页6-request模块+get请求+正则筛选相关推荐

  1. python3 request模块 post请求四种方式

    HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式.常见的四种编码方式如下: 1.application/x-www-for ...

  2. python11(BS4模块和request模块)

    1.BS4模块 1.BS4简介 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为tiful Soup自动将输入文档转 ...

  3. Request模块基本常识

    文章目录 Request模块简介 发送请求: r.text 定制请求头: 添加请求头 Form表单提交数据 POST传递数据 响应状态码 响应头 Cookie 重定向与请求历史 重定向 处理重定向 超 ...

  4. 利用python爬虫(part1)--urllib.request模块

    学习笔记 文章目录 网络爬虫概述 定义 爬虫分类 爬取数据步骤 爬虫请求模块 常用方法 urllib.request.urlopen()方法 响应对象(response)方法 关于请求头 urllib ...

  5. 第二十六篇 request模块使用

    心得:requests模块还是比较好用的,运用起来简单,而且结合python,爬取网页数据,那简直分分钟的事情. requests请求一般分为两种请求方式: 1 get请求:一般用来请求数据,获取数据 ...

  6. 07.26爬虫request模块之药监局学习笔记

    ### request模块之药监局代码部分 #动态加载数据 #url基本一致只是id不一样 #详情页的也是动态加载出来的 #就意味着只要可以获取到id在将其带入到url中,但是首先怎么获得,其次怎么拼 ...

  7. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  8. 爬虫之request模块

    目录 request模块理论 实战练习 1.需求:爬取搜狗首页的页面数据 2.需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器) 3.需求:破解百度翻译 4.爬取肯德基地点 5.爬取国家药品监 ...

  9. python爬虫——request模块讲解

    一.概述 在后期渗透测试中,经常会遇到需要向第三方发送http请求的场景,python中的requests库可以很好的满足这一要求,Requests模块是一个用于网络请求的模块,主要用来模拟浏览器发请 ...

最新文章

  1. java金额小写转大写(8.2)
  2. 随堂小测app冲刺(六)
  3. seo发展基本趋势优化专员必须知道!
  4. extjs 限制上传文件类型_如何让extjg 支持选择多文件上传
  5. 使用EL表达式接收url的传值
  6. byte 8位有符号 与 char 16位无符号
  7. c语言字符串替换有大小写,(C语言)字符串大小写无关查找替换
  8. mave本地导入mysql的jar包_将本地的jar包引入到maven项目中
  9. DIV_ROUND_CLOSEST函数
  10. mysql中exists 和 in的用法你还真不知道
  11. Jamovi 教程:比SPSS还好用的统计软件,强烈安利
  12. Keil5安装教程最快方法(C51与MDK共存)
  13. 有道云笔记同步失败原因之一
  14. 联想计算机管理员权限设置,联想电脑windows10管理员权限开启的4种方法
  15. 第二十九章、containers容器类部件QFrame框架部件详解
  16. 数据流分析之Reaching Definition Analysis
  17. IT科技业2012事件与人物:移动互联网时代
  18. CSDN博文周刊第一期 | 2018年总结:向死而生,为爱而活——忆编程青椒的戎马岁月
  19. 3分钟看懂零售店新经济:零售店如何运营数据分析经营好门店?
  20. 美术细化专业课程-张聪-专题视频课程

热门文章

  1. 时序轮转的意思_时序轮转 春之耕耘篇
  2. 一般物品识别易语言代码
  3. 数据结构严蔚敏--第七章--图
  4. 「洛谷 3768」简单的数学题
  5. Activity四种启动模式详细整理
  6. Nagios安装、配置、问题记录
  7. C#调用迅雷下载实例
  8. SQLite出错问题
  9. 安装时创建数据库、数据表等,同时添加初始数据
  10. USTC算法设计与分析-总结