利用Python,爬取 51job 上面有关于 IT行业 的招聘信息

  版权声明:未经博主授权,内容严禁分享转载  

案例代码:

  1. # __author : "J"
  2. # date : 2018-03-07
  3.  
  4. import urllib.request
  5. import re
  6. import pymysql
  7.  
  8. connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='******', db='51job',
  9. charset='utf8')
  10. cursor = connection.cursor()
  11.  
  12. num = 0
  13. textnum = 1
  14. while num < 18:
  15.  
  16. num += 1
  17. # 51job IT行业招聘网址 需要翻页,大约800多条数据
  18. request = urllib.request.Request(
  19. "http://search.51job.com/list/120000,000000,0100,32,9,99,%2B,2," + str(
  20. num) + ".html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=1&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=")
  21.  
  22. response = urllib.request.urlopen(request)
  23. my_html = response.read().decode('gbk')
  24. # print(my_html)
  25.  
  26. my_re = re.compile(r'href="(.*?)" onmousedown="">')
  27. second_html_list = re.findall(my_re, my_html)
  28.  
  29. for i in second_html_list:
  30. second_request = urllib.request.Request(i)
  31. second_response = urllib.request.urlopen(second_request)
  32. second_my_html = second_response.read().decode('gbk')
  33. # 职位 地区 工资 公司名称 公司简介
  34. # 工作经验 学历 招聘人数 发布时间
  35. # 职位信息 联系方式 公司信息
  36. second_my_re = re.compile('<h1 title=.*?">(.*?)<input value=.*?' +
  37. '<span class="lname">(.*?)</span>.*?' +
  38. '<strong>(.*?)</strong>.*?' +
  39. 'target="_blank" title=".*?">(.*?)<em class="icon_b i_link"></em></a>.*?' +
  40. '<p class="msg ltype">(.*?)</p>.*?</div>'
  41. , re.S | re.M | re.I)
  42. second_html_news = re.findall(second_my_re, second_my_html)[0]
  43. zhiwei = second_html_news[0].replace("\n|\t|\r|\r\n", '').replace("&nbsp;", '').replace(" ", '').replace(
  44. " ",
  45. '')
  46. diqu = second_html_news[1].replace("\n|\t|\r|\r\n", '').replace("&nbsp;", '').replace(" ", '').replace(
  47. " ",
  48. '')
  49. gongzi = second_html_news[2].replace("\n|\t|\r|\r\n", '').replace("&nbsp;", '').replace(" ", '').replace(
  50. " ",
  51. '')
  52. gongsimingcheng = second_html_news[3].replace("\n|\t|\r|\r\n", '').replace("&nbsp;", '').replace(" ",
  53. '').replace(
  54. " ",
  55. '')
  56. gongsijianjie = second_html_news[4].replace("\n|\t|\r|\r\n", '').replace("&nbsp;", '').replace(" ",
  57. '').replace(
  58. " ",
  59. '')
  60. # print(zhiwei,diqu,gongzi,gongsimingcheng,gongsijianjie)
  61. try:
  62. second_my_re = re.compile('<span class="sp4"><em class="i1"></em>(.*?)</span>'
  63. , re.S | re.M | re.I)
  64. yaoqiu = re.findall(second_my_re, second_my_html)[0]
  65. except Exception as e:
  66. pass
  67. try:
  68. second_my_re = re.compile('<span class="sp4"><em class="i2"></em>(.*?)</span>'
  69. , re.S | re.M | re.I)
  70. yaoqiu += ' | ' + re.findall(second_my_re, second_my_html)[0]
  71. except Exception as e:
  72. pass
  73. try:
  74. second_my_re = re.compile('<span class="sp4"><em class="i3"></em>(.*?)</span>'
  75. , re.S | re.M | re.I)
  76. yaoqiu += ' | ' + re.findall(second_my_re, second_my_html)[0]
  77. except Exception as e:
  78. pass
  79. try:
  80. second_my_re = re.compile('<span class="sp4"><em class="i4"></em>(.*?)</span>'
  81. , re.S | re.M | re.I)
  82. yaoqiu += ' | ' + re.findall(second_my_re, second_my_html)[0]
  83. except Exception as e:
  84. pass
  85. # print(yaoqiu)
  86. second_my_re = re.compile('<div class="bmsg job_msg inbox">(.*?)<div class="mt10">'
  87. , re.S | re.M | re.I)
  88. gangweizhize = re.findall(second_my_re, second_my_html)[0].replace("\r\n|\n|\t|\r", '').replace(" ",
  89. '').replace(
  90. " ", '').replace("&nbsp;", '')
  91.  
  92. dr = re.compile(r'<[^>]+>', re.S)
  93. gangweizhize = dr.sub('', gangweizhize)
  94.  
  95. second_my_re = re.compile('<span class="bname">联系方式</span>(.*?)<div class="tBorderTop_box">'
  96. , re.S | re.M | re.I)
  97. lianxifangshi = re.findall(second_my_re, second_my_html)[0].replace("\r\n|\n|\t|\r", '').replace("&nbsp;", '')
  98.  
  99. dr = re.compile(r'<[^>]+>', re.S)
  100. lianxifangshi = dr.sub('', lianxifangshi)
  101. lianxifangshi = re.sub('\s', '', lianxifangshi)
  102.  
  103. second_my_re = re.compile('<span class="bname">公司信息</span>(.*?)<div class="tCompany_sidebar">'
  104. , re.S | re.M | re.I)
  105. gongsixinxi = re.findall(second_my_re, second_my_html)[0].replace("&nbsp;", '')
  106. dr = re.compile(r'<[^>]+>', re.S)
  107. gongsixinxi = dr.sub('', gongsixinxi)
  108. gongsixinxi = re.sub('\s', '', gongsixinxi)
  109.  
  110. print('第 '+str(textnum) + ' 条数据 **********************************************')
  111. print(zhiwei, diqu, gongzi, gongsimingcheng, gongsijianjie, yaoqiu, gangweizhize, lianxifangshi, gongsixinxi)
  112. textnum += 1
  113. # try:
  114. # sql = "INSERT INTO `jobNews` (`position`,`region`,`Pay`,`company`,`Nature`,`Requirement`,`Job_information`,`Contact_information`,`Company_information`) VALUES ('" + zhiwei + "','" + diqu + "','" + gongzi + "','" + gongsimingcheng + "','" + gongsijianjie + "','" + yaoqiu + "','" + gangweizhize + "','" + lianxifangshi + "','" + gongsixinxi + "')"
  115. # cursor.execute(sql)
  116. # connection.commit()
  117. # print('存储成功!')
  118. # except Exception as e:
  119. # pass
  120.  
  121. cursor.close()
  122. connection.close()

效果:

我正则表达式用的不好,所以写的很麻烦,接受建议~

Python网络爬虫案例(二)——爬取招聘信息网站的更多相关文章

  1. Python 网络爬虫 002 (入门) 爬取一个网站之前,要了解的知识

    网站站点的背景调研 1. 检查 robots.txt 网站都会定义robots.txt 文件,这个文件就是给 网络爬虫 来了解爬取该网站时存在哪些限制.当然了,这个限制仅仅只是一个建议,你可以遵守,也 ...

  2. Python网络爬虫与如何爬取段子的项目实例

    一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...

  3. 【Python网络爬虫三】 爬取网页新闻

    学弟又一个自然语言处理的项目,需要在网上爬一些文章,然后进行分词,刚好牛客这周的是从一个html中找到正文,就实践了一下.写了一个爬门户网站新闻的程序 需求: 从门户网站爬取新闻,将新闻标题,作者,时 ...

  4. Python 网络爬虫实战:爬取 B站《全职高手》20万条评论数据

    本周我们的目标是:B站(哔哩哔哩弹幕网 https://www.bilibili.com )视频评论数据. 我们都知道,B站有很多号称“镇站之宝”的视频,拥有着数量极其恐怖的评论和弹幕.所以这次我们的 ...

  5. 精通python网络爬虫之自动爬取网页的爬虫 代码记录

    items的编写 # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentati ...

  6. python网络爬虫之四简单爬取豆瓣图书项目

    一.爬虫项目一: 豆瓣图书网站图书的爬取: import requests import re content = requests.get("https://book.douban.com ...

  7. Python爬取招聘信息,并且存储到MySQL数据库中

    前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...

  8. python 网络爬虫(二)

    一.编写第一个网络爬虫 为了抓取网站,我们需要下载含有感兴趣的网页,该过程一般被称为爬取(crawling).爬取一个网站有多种方法,而选择哪种方法更加合适,则取决于目标网站的结构. 首先探讨如何安全 ...

  9. 网络爬虫之scrapy爬取某招聘网手机APP发布信息

    1 引言 过段时间要开始找新工作了,爬取一些岗位信息来分析一下吧.目前主流的招聘网站包括前程无忧.智联.BOSS直聘.拉勾等等.有段时间时间没爬取手机APP了,这次写一个爬虫爬取前程无忧手机APP岗位 ...

随机推荐

  1. ZOJ 3985 - String of CCPC - [字符串处理]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985 题意: 给出一个长度为n的字符串,全部由'C'和'P'组成 ...

  2. SQL Fundamentals || Single-Row Functions || 字符函数 character functions

    SQL Fundamentals || Oracle SQL语言   SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...

  3. POJ_2533_Longest Ordered Subsequence

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 55490   Acc ...

  4. android adt自带eclipse无法设置ndk路径

    android sdk官网下载r23版本的adt时自带的eclipse没有设置ndk路径的地方,通过Install New Software 发现无法更新,那么如何解决这个问题呢?     软件百度云 ...

  5. sql中union 和union all

    两者都是把两个表合并到一起,不同的是,union是要去重的,union all不去重

  6. 伪列ROWNUM、ROWID部分用法

    ROWNUM是逻辑值,不可以参与计算 ROWID是物理值,可以参与计算 在ROWNUM和ROWID使用中,现将查找结果形成一个结果集 在结果集中给ROWID 和ROWNUM别名,在外层中使用这个别名找 ...

  7. windows7系统下让所有文件夹都使用同一种视图的方法

    Windows7系统可以对每个文件夹进行个性化视图设置,可以根据自己的个人喜好和实际需要更改文件或文件夹图标的大小,或者让文件或文件夹以列 表.平铺等方式显示.但是,如果你对N个文件夹视图进行了风格各 ...

  8. CentOS 7设置Samba共享目录

    1. 安装Samba服务 yum -y install samba # 查看yum源中Samba版本 yum list | grep samba # 查看samba的安装情况 rpm -qa | gr ...

  9. 如何bitbucket上删除项目

    老外网页操作习惯不同,删除项目的按钮,我花了半天,突然瞟到delete,如下图(真他妈的隐蔽,记住这2017/3/7):

  10. [LeetCode] 237. Delete Node in a Linked List_Easy tag: Linked List

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...