源码:

  1. import requests
  2. import re
  3. from my_mysql import MysqlConnect
  4. import time,random
  5.  
  6. # 获取招聘详情链接
  7. def get_urls(page, headers):
  8. url = 'https://hr.tencent.com/position.php?lid=&tid=&keywords=python&start=page'.format(page)
  9. response = requests.get(url, headers=headers)
  10. pat = r'href="(position_detail.*?)">'
  11. url_list_bytes = re.findall(pat.encode('utf-8'), response.content)
  12. return url_list_bytes
  13.  
  14. # 获取招聘详情
  15. def get_info(url, headers):
  16. response = requests.get(url, headers=headers)
  17. html_bytes = response.content
  18. # print(html_bytes)
  19.  
  20. # title 标题
  21. pat = r'id="sharetitle">(.*?)</td>'
  22. res = re.search(pat.encode('utf-8'), html_bytes)
  23. title = res.group(1).decode('utf-8')
  24. # address 地点
  25. pat = r'工作地点:</span>(.*?)</td>'
  26. res = re.search(pat.encode('utf-8'), html_bytes)
  27. address = res.group(1).decode('utf-8')
  28. # types 类别
  29. pat = r'职位类别:</span>(.*?)</td>'
  30. res = re.search(pat.encode('utf-8'), html_bytes)
  31. types = res.group(1).decode('utf-8')
  32. # counts 人数
  33. pat = r'招聘人数:</span>(.*?)</td>'
  34. res = re.search(pat.encode('utf-8'), html_bytes)
  35. counts = res.group(1).decode('utf-8')
  36. # duty 职责
  37. pat = r'工作职责.*?<ul class="squareli">(.*?)</ul>'
  38. res = re.search(pat.encode('utf-8'), html_bytes)
  39. duty_str = res.group(1).decode('utf-8')
  40. pat = r'<li>(.*?)</li>'
  41. duty = re.findall(pat,duty_str)
  42. duty = ('\n').join(duty)
  43. # requires 要求
  44. pat = r'工作要求.*?<ul class="squareli">(.*?)</ul>'
  45. res = re.search(pat.encode('utf-8'), html_bytes)
  46. requires_str = res.group(1).decode('utf-8')
  47. pat = r'<li>(.*?)</li>'
  48. requires = re.findall(pat, requires_str)
  49. requires = ('\n').join(requires)
  50. return title,address,types,counts,duty,requires
  51.  
  52. if __name__ == '__main__':
  53. mc = MysqlConnect('127.0.0.1','root','','homework')
  54. sql = "insert into tencentzp(title,address,types,counts,duty,requires) values(%s,%s,%s,%s,%s,%s)"
  55. headers = {
  56. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
  57. }
  58. for page in range(0,200,10):
  59. url_list_bytes = get_urls(page,headers)
  60. # print(url_list_bytes)
  61. for url in url_list_bytes:
  62. # print(url.decode('utf-8'))
  63. url = 'https://hr.tencent.com/' + url.decode('utf-8')
  64. info = get_info(url,headers)
  65. print(info)
  66. mc.exec_data(sql,info)
  67. time.sleep(random.random()*5)

Python爬虫(八)的更多相关文章

  1. Python爬虫(八)_Requests的使用

    Requests:让HTTP服务人类 虽然Python的标准库中urllib2模块中已经包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太好,而Requests自称"HTTP ...

  2. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

  3. 孤荷凌寒自学python第八十天开始写Python的第一个爬虫10

    孤荷凌寒自学python第八十天开始写Python的第一个爬虫10 (完整学习过程屏幕记录视频地址在文末) 原计划今天应当可以解决读取所有页的目录并转而取出所有新闻的功能,不过由于学习时间不够,只是进 ...

  4. Python爬虫之selenium的使用(八)

    Python爬虫之selenium的使用 一.简介 二.安装 三.使用 一.简介 Selenium 是自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏 ...

  5. Python 爬虫从入门到进阶之路(八)

    在之前的文章中我们介绍了一下 requests 模块,今天我们再来看一下 Python 爬虫中的正则表达的使用和 re 模块. 实际上爬虫一共就四个主要步骤: 明确目标 (要知道你准备在哪个范围或者网 ...

  6. 小白学 Python 爬虫(41):爬虫框架 Scrapy 入门基础(八)对接 Splash 实战

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  7. python爬虫Scrapy(一)-我爬了boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  8. Python爬虫(1):基础知识

    爬虫基础知识 一.什么是爬虫? 向网站发起请求,获取资源后分析并提取有用数据的程序. 二.爬虫的基本流程 1.发起请求 2.获取内容 3.解析内容 4.保存数据 三.Request和Response ...

  9. Python爬虫入门教程 12-100 半次元COS图爬取

    半次元COS图爬取-写在前面 今天在浏览网站的时候,忽然一个莫名的链接指引着我跳转到了半次元网站 https://bcy.net/ 打开之后,发现也没有什么有意思的内容,职业的敏感让我瞬间联想到了 c ...

  10. Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

随机推荐

  1. OpenSAML2.X 在SSO系统中的应用

    背景 年底的时候有机会开发一个SPA(单页面应用)的项目,那时候须要用到票据的方式能够用Cookie的方式来登录.当是想到了OpenID或者是CAS的方式来做统一认证中心.后来一个安全界的大牛推荐让我 ...

  2. jenkins + jacoco 单元测试覆盖率

    1.新建一个maven工程,在src/main/java 下建一个CoverageTest.java 类 package test_junit; public class CoverageTest { ...

  3. [Informix] unload load

    select tabname from systables where tabname  like 'aa%' select * from syscolumns where tabname like ...

  4. p4n 今天与朋友沟通支付云服务普及以及跨境电子商务的光辉前景

    p4n 今天与朋友沟通支付云服务普及以及跨境电子商务的光辉前景 跨境电子商务也是个光忙四色和的跨境电子商务啊..支付项目也是个强大的项目.. 过几天我们就要宣布正式发布atipay ,并宣称将致力于推 ...

  5. oracle ORA-12545:因目标主机或对象不存在

    解决方法: 1.首先从最基本的入手,这里打开计算机右击,选择管理 2. 找到里面的服务和应用程序,打开服务 3.找到: OracleOraDb11g_home1TNSListener OracleSe ...

  6. JS PHP MySQL 字符长度

    摘要: js的string.length 属性取的是字符串的实际长度 php的str_len()函数取的是字符串的字节长度,中文utf-8占3个字节,gb2312占2个字节 mysql中的varcha ...

  7. python学习笔记(9)--Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法

    Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法 这篇文章主要介绍了Python UnicodeEncodeErro ...

  8. Unix系统编程()改变信号处置:signal

    Unix系统提供了两种方法来改变信号处置:signal和sigaction.这篇描述的是signal系统调用,是设置信号处理的原始API,所提供的接口比sigaction简单.另一方面,sigacti ...

  9. [Linux内核]软中断与硬中断

    转自:http://blog.csdn.net/zhangskd/article/details/21992933 本文主要内容:硬中断 / 软中断的原理和实现 内核版本:2.6.37 Author: ...

  10. Mybatis批量更新<转>

    Mybatis批量更新 批量操作就不进行赘述了.减少服务器与数据库之间的交互.网上有很多关于批量插入还有批量删除的帖子.但是批量更新却没有详细的解决方案. 实现目标 这里主要讲的是1张table中.根 ...