首先说一下这个有啥用?要说有用也没啥用,要说没用吧,既然能拿到这些数据,拿来做数据分析。能有效的得到职位信息,薪资信息等。也能为找工作更加简单吧,且能够比较有选择性的相匹配的职位及公司

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

本章节源码仓库为:https://github.com/Mr2753/PythonScrape

一言不合直接上代码!具体教程及思路总代码后!
所用解释器为Python3.7.1,编辑器为Pycharm 2018.3.5.
本着虚心求学,孜孜不倦,逼逼赖赖来这里虚心求学,孜孜不倦,逼逼赖赖,不喜勿喷,嘴下手下脚下都请留情。

本节所涉:Request基本使用、Request高级使用-会话维持、Cookies、Ajax、JSON数据格式

Request更多详情请参考Request官方文档:

轻松入门中文版

高级使用中文版

Cookie:有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息

具体Cookies详情请参考:https://baike.baidu.com/item/cookie/1119?fr=aladdin

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

JSON(JavaScript Object Notation): 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

首先介绍一下关于本章代码的基本思路:

四步走(发起请求、得到响应、解析响应得到数据、保存数据)

四步中准确来说是三步,(发起请求,得到响应、解析响应,提取数据、保存数据)

  • 请求网页(在搜索框中输入所查询的岗位<例如:Python>,得到BASE_URL,)

    • BASE_URL:https://www.lagou.com/jobs/list_Python?labelWords=&fromSearch=true&suginput=
    • 加入请求头(注意加Cookies),请求BASE_URL

    • 观察响应信息以及本网页源码观察浏览器网页源码,对比发现其中并没有我们所需要的信息:发现Ajax的痕迹。
    • 经过一系列操作发现Ajax网页地址(在这里直接请求此链接并不能访问):
    • 多次请求过后,发现错误。错误的缘由是由于Cookies限制,并且网页以动态检测,且时间间隔小。
      • 经过前言的学习,已经学会了。会话维持。动态得到Cookies,这样不就可以把这个“反爬”彻底绕过了呢?答案肯定是滴
      • 哪让我们做一下会话维持,并动态提取Cookies吧。
      • 易混淆点:cookies的维持为什么是维持BASE_URL的而不是Ajax_URL?下面按照个人理解对于本Ajax给出以下解释:结合Ajax原理可知,Ajax其基本原理就是在网页中插入异步触发的。说到底他还是在这个页面,并没有转到其他页面。只是需要特定条件触发即可插入本网页
        • 1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          def Get_cookies(header):

          """

          Get cookies

          @param header:

          @return: cookies

          """

          with requests.Session() as s:

          s.get(cookies_url, headers=header)

          cookies = s.cookies

          # cookies = requests.get(cookies_url, headers=header).cookies

          return cookies

      • 万事俱备、只欠东风:请求Ajax_URL 即可得到以下
      • 得到响应:经过以上操作已经请求完成了。并能够保障请求稳定性。(当然在此并没有做异常捕获,如果加上,将会更稳)
  • 解析响应:如果上述步骤没有错的话,到此已经能得到网页数据了(如上图):

    • 我用的提取代码如下 :

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      def parse(message):

      industryField = message['industryField']

      # company_message

      positionName = message['positionName']

      companyFullName = message['companyFullName']

      companySize = message['companySize']

      financeStage = message['financeStage']

      # companyLabelList = message['companyLabelList']

      companyLabelList = '|'.join(message['companyLabelList'])

      Type = "|".join([message['firstType'], message['secondType'], message['thirdType']])

      Address = ''.join([message['city'], message['district'], ])

      salary = message['salary']

      positionAdvantage = message['positionAdvantage']

      # limitation factor

      workYear = message['workYear']

      jobNature = message['jobNature']

      education = message['education']

      items = f"{positionName}, {companyFullName}, {companySize}, {financeStage}, {companyLabelList}, {industryField}, " \

      f"{Type}, {salary}, {jobNature}, {education}"

      # items = "".join(str(

      #     [positionName, companyFullName, companySize, financeStage, companyLabelList, industryField, Type, salary,

      #      jobNature, education]))

      if items:

      # print(items)

      logging.info(items)

      # return items.replace('[', '').replace(']', '')

      return items.replace('(', '').replace(')', '')

    • 此时只需提取相关数据,即可。得到:
  • 保存数据:

    • 常规保存:(保存到本地)

1

2

3

4

def save_message(item):

with open('lg3.csv', 'a+', encoding='gbk') as f:

f.write(item + '\n')

thread_lock.release()

  • 数据入库:(保存到数据库)

  • 本源码地址:https://github.com/Mr2753/PythonSpider/blob/master/%E8%81%8C%E4%BD%8D%E6%8B%9B%E8%81%98/Demo_Mongo.py

在这里我选择的为Mongo,接下来,那咱们操作一下吧。Mongo的安装便不在此处赘述。与mongo相关的文章,在这里比较推荐才哥和东哥的几篇文章(以本文来看,比较建议看看这几篇文章。并没说其他不好啊,不,我没有,我没说哦),地址如下:

  • 如何学好 MongoDB

  • [Python3网络爬虫开发实战] 1.4.2-MongoDB安装

  • [Python3网络爬虫开发实战] 1.5.2-PyMongo的安装

前方高能预警,造!!!:(此时的你已安装了Mongo,并能正常使用mongo。剩下的交给我,我教你好了)

  1. 安装pymongo

    安装pymogo

    Python

    1

    pip install pymongo

  2. 建立连接:在原有的代码基础上改写,添加类似于如下的代码:

    Client MongoClian

    Python

    1

    2

    3

    4

    5

    6

    7

    MONGO_CONNECTION_STRING = 'mongodb://localhost:27017'

    # MONGO_DB_NAME = 'Jobs'

    # MONGO_COLLECTION_NAME = 'Jobs'

    client = pymongo.MongoClient(MONGO_CONNECTION_STRING)

    db = client['Jobs']

    collection = db['Jobs']

  3. 新增存储方法:

    定义存储入数据库的方法

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    def save_data(self, date):

    """

    save to mongodb

    :param date:

    :return:

    """

    collection.update_one({

    'name': date.get('companyShortName')

    }, {

    '$set': date

    }, upsert=True)

  4. 调用此方法:

    1

    2

    3

    4

    5

    6

    def main():

    p = LaGou()

    for page in range(1, 31):

    content = p.scrape(page)

    data = p.parseResponse(content)

    download = p.save_data(data)

注意:由于mongo的存储格式为key :value形式,所以咱们提取到的数据返回也必须是key :value形式:

看我看我,怎么搞的,我是这样搞的:

左手叉腰,右手摇,Over!

光看文章的话,就算是我自己写的文章单单仅仅看文章也是会云里雾里,建议与源码一起阅读。祝学习进步,心想事成。加油~

写到最后:既然能读到这儿,那么我相信不是白嫖成为习惯的人,说明也或多或少想自己搞一搞。整一整?下次也出来吹吹牛皮,拉钩晓得不,反爬难吧?我会了(虽然对于大佬来说,都可能算不上反扒,和玩似的,这个确实也是的。不过吧,对于新手来说,已经算很难了。)我也是搞过拉勾的男人。找工作就找我,啊哈哈哈。

Python突破拉钩反爬机制,采集各类招聘数据相关推荐

  1. 爬取拉钩 破解拉钩反爬机制

    破解拉钩反爬 实现爬取内容 拉钩的反爬很厉害 没毛病 老铁!! 我们现在来研究一下拉钩的请求头先 导入的有一个ip池(get_ip) ip池可以不写 用自己的也不会被封掉还有我是第一次写这些文章 给个 ...

  2. 抓取设了CSS反爬机制的大众点评数据(下)

    该篇实现大众点评爬虫操作代码,所有原理都在(上)篇均已详细阐述,让我没想到的是大众点评不仅设置了CSS反爬,在ip限制方面也是十分的凶狠,不得已花了10块钱买了一天代理ip. 大众点评究的反爬竟有多恶 ...

  3. Python破解百度翻译反爬机制---自制翻译器

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  4. python爬虫进阶,突破反脚本机制(反爬机制)

    前言 相信大家在做爬虫或者自动化脚本时或多或少的都能遇到反爬机制(或者说反脚本机制),最常见的反脚本机制都是在登录时进行验证,据本人大量实战(帮粉丝写脚本)发现,基本上只要有点水平的网站都会有反脚本的 ...

  5. 网站有反爬机制就爬不了数据?那是你不会【反】反爬!道高一尺魔高一丈啊!

    不知道你们在用爬虫爬数据的时候是否有发现,越来越多的网站都有自己的反爬机制,抓取数据已经不像以前那么容易,目前常见的反爬机制主要有以下几种: 数据是通过动态加载的,比如微博,今日头条,b站 需要登录, ...

  6. 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  7. Python爬虫实战——反爬机制的解决策略【阿里】

    这一次呢,让我们来试一下"CSDN热门文章的抓取". 话不多说,让我们直接进入CSND官网. (其实是因为我被阿里的反爬磨到没脾气,不想说话--) 一.URL分析 输入" ...

  8. python实战:利用chrome抓包插件HTTP间谍分析有道翻译反爬机制

    本次实战目标站点:http://fanyi.youdao.com/?keyfrom=fanyi-new.logo ,主要利用HTTP间谍抓包插件分析有道翻译反爬机制,该抓包能帮我们过滤掉一些不需要的常 ...

  9. 爬全景网壁纸(反爬机制Referer)

    url以及参数: https://www.quanjing.com/Handler/SearchUrl.ashx?t=1509&callback=searchresult&q=%E5% ...

最新文章

  1. Error:(39, 13) Failed to resolve: com.android.support:appcompat-v7:26.0.0 [duplicate]
  2. 三分钟黑了阿里?马云下死命令留他?吴翰清辟谣:我没黑过阿里
  3. IIS配置网站定时任务必设参数图文教程
  4. Java JDK 学习笔记:File类
  5. AVPlayer 之avcore模块
  6. 使用反射处理protobuf数据结构
  7. python调用百度智能云API请求(以自然语言处理——词法分析为例)
  8. 比较ipv6有状态与无状态地址分配工作特点_IPv6环境获取IPV6地址,无状态地址分配,一分钟了解下...
  9. python 秒数转化为时分秒
  10. CKFinder 2.0.2 破解小计
  11. 如何进行Tuxera NTFS的挂载卷设置?
  12. Linux 简单教程
  13. HTML制作qq空间主页
  14. jlink接口定义(jlink接口定义 swd4线)
  15. SQL中日期函数的运用
  16. 咕泡p5人工智能深度学习高薪就业5期学习
  17. 暗影精灵 官方恢复出厂系统镜像HP Cloud Recovery Tool
  18. Windows10中,安卓模拟器与docker环境要求的虚拟技术冲突导致电脑蓝屏的解决办法
  19. C语言bmp图片读写,画点,画线
  20. Android ConstraintLayout 约束布局

热门文章

  1. linux-shell入门-shell两种使用方式-shell的基本特性
  2. SQL Server AlwaysOn集群在辅助副本创建只读账号
  3. selenium 图片上传
  4. vue 组件高级用法实例详解
  5. spark RDD,reduceByKey vs groupByKey
  6. js实现文章显示部分内容
  7. 利用burp实现弱密码破解
  8. Python的简史:一切从讨厌花括号开始
  9. 51Nod 1085 01背包
  10. 八年数据库之路的感悟