目录

前言

开始

分析(x0)

分析(x1)

分析(x2)

分析(x3)

分析(x4)

代码

效果

我有话说


前言

emmmmmm, 大家好我叫善念。基本是每天更新一篇Python爬虫实战的文章,不过反响好像也不怎么好,都是几百阅读吧,我自认为我每篇文章都讲解的非常仔细,大家感兴趣可以去考评一下:

【Python】绕过反爬,开发音乐爬虫,实现完美采集

【Python】纯干货,5000字的博文教你采集整站小说(附源码)

【Python】绕过X音_signature签名,完美采集整站视频、个人视频

好与坏都能接受,精进是咱一直在做的事情

开始

目标网址

搜下Python相关的工作

好了,这个页面就是咱们想要采集的一些数据。

分析(x0)

这次直接点,查看网页源代码,搜一下我们需要采集的内容,看下源代码中是否有咱们需要的数据:

显示的结果为0,也就是说数据不在咱们的网页源代码中。

但是它是在咱们的element网页元素中的,这就是我反复强调的:网页源代码才是服务器传给浏览器的原始数据,而网页元素是网页源代码通过浏览器渲染后的数据(可能浏览器会执行某些源代码中的JavaScript脚本而实现的效果)

分析(x1)

既然网页源代码中没有,元素中有,那么我们可以用selenium去进行一个数据采集,因为selenium采集的数据就是元素中的数据,但是缺点就是采集的速度慢。

不想速度慢,就继续去分析,咱们抓一下包看看是不是浏览器执行了网页源码中的JavaScript脚本从而调用了某个接口api生成了咱们需要的数据。刷新当前页面抓包:

嘿嘿,可以看到出现了禁止调试阿,开发人员写了个JavaScript语句防止咱们调试怎么办?

点一下向右的箭头,打开无视断点,然后再点一下运行即可。

emmmmm看下抓到的数据

已经确认就是这个包了,然后咱们分析下这个请求

post请求,然后有这么三个参数:

first不知道什么意思,pn为1(这是第一页)kd为Python(搜的关键词为Python)。

说明说明?只要我们请求这个链接就可以得到想要的数据咯!

这里千万注意,服务器会检测cookies, 也就是咱们请求头中一定要携带cookies!自己去测试一下即可。

分析(x2)

那么第一页咱们就愉快的采集下来了,用提取规则提取出想要的数据即可。

那么分析X1里面的一个点再重复讲一下,服务器会检测cookies, 也就是咱们请求头中一定要携带cookies!

而cookies有时效性(比如你登录了某某网站,那么短时间内无需重新登录,而十天半个月后可能就需要你重新登录了,就是这么个道理)

那么说明:我们在采集数据之前,首先去自动获取网页的cookies,然后再用这个cookies去采集数据。这样就可以实现一个全自动化,而非手动去复制cookies

那么思路就清晰了:先白用户(不携带cookies),requests访问网站首页得到服务器返回的cookies,然后用这个cookies去post接口得到咱们需要的数据

到此为止,咱们也只是采集到了第一页的数据,而如果咱们需要采集所有的数据呢?

咱们继续分析,如果要采集所有的页码上数据,我经常跟你们讲的思路:先看看翻页后咱们网站的变化,很明显在这里咱们行不通了,因为数据是接口api生成的。所以呢,我们转换下思路,翻页后抓到第二页的api看看与第一页api的不同之处。

看得到,几个变化的点,和不变化的点,首先post的地址是没变的,而参数变了。

first变为了false,pn为页码变成了2,关键词还是Python不变,新增了sid参数。

分析(x3)

看下第三页,是不是first还是FALSE,sid值也不变,如果不变就好办了(也就是说第一页与后面页码的参数不同而已),如果一直无限变化,咱们就需要找找变化的规律了。

看了第三页的包,我知道事情好办了。

规律总结:参数frist第一页为ture,其它页全为FALSE,pn随页码变化,kd为自己搜索的关键词,sid第一页为空,后面的页码为固定值(这里我要跟大家解释一下,其实你第一页把这个sid参数传入进去,一样是可以访问的。别问为什么,这个是作为一个高级爬虫师的一个直觉)。

当我们翻到第一页,果然真的是携带sid的.......而且first变为了FALSE,这就很神奇了。

神奇的点在哪?咱们前面抓首页的包的时候,可以看到first为TRUE,sid是没有这个参数的,那么也就是说是访问了第一页后生成了sid这个参数,然后把sid传入到第二个页码接口的参数当中的。

如果说咱们如果直接把所有页码接口的参数都写成四个,first都没TRUE,sid为固定死,可行吗?

不可行,除非你手动抓包去复制sid,因为sid是访问了第一页的数据后生成的......

如果理解不了多看看神奇的点在哪这一段话。

总结一下咱们现在需要做的事情就是去搞清楚sid这个值从何而来。

分析(x4)

直接ctrl+f搜一下即可,可以知道sid果然是第一页的post后得到数据。

 那么总思路就是,先访问首页获取cookies,然后post第一页得到sid。而第一页的参数first为TRUE,sid为空,后面的页码first为FALSE,sid为第一页post后得到的值。

......我刚手动翻页的时候

醉了,网站改版了,未登录用户操作次数过多会直接让你去登录......也就是说cookies只能去手动登录后去复制了,因为这个登录也有那个特殊的验证码,没法去过。找打码台子也不划算.....

没办法,委屈各位手动cookies了。

代码

import requests
import time
import syscookies = '手动copy'
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
headers = {'authority': 'www.lagou.com','method': 'POST','path': '/jobs/positionAjax.json?needAddtionalResult=false','scheme': 'https','accept': 'application/json, text/javascript, */*; q=0.01','accept-encoding': 'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','content-length': '63','content-type': 'application/x-www-form-urlencoded; charset=UTF-8','cookie': cookies,'origin': 'https://www.lagou.com','referer': 'https://www.lagou.com/jobs/list_Python?labelWords=&fromSearch=true&suginput=','sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"','sec-ch-ua-mobile': '?0','sec-fetch-dest': 'empty','sec-fetch-mode': 'cors','sec-fetch-site': 'same-origin',# 'traceparent': '00-2a566c511e611ee8d3273a683ca165f1-0c07ea0cee3e19f8-01','user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36','x-anit-forge-code': '0','x-anit-forge-token': 'None','x-requested-with': 'XMLHttpRequest',}
sid = ""def get_data(flag, page, sid):data = {'first': flag,'pn': page,'kd': 'python','sid': sid}return datafor page in range(1, sys.maxsize):time.sleep(5)if page == 1:flag = Trueelse:flag = Falseresponse = requests.post(url=url, headers=headers, data=get_data(flag, page, sid))sid = response.json()["content"]['showId']text = response.json()['content']['positionResult']['result']print(text)with open("result.csv", "a", encoding='utf-8') as file:for cp in text:cp_msg = f"{cp['city']},{cp['companyFullName']},{cp['companySize']},{cp['education']},{cp['positionName']},{cp['salary']},{cp['workYear']}\n"file.write(cp_msg)print(f"第{page}页爬取完成")print("爬取完成")

效果

我有话说

—— 有一些人,
他们赤脚在你生命中走过,
眉眼带笑,不短暂,也不漫长 .
却足以让你体会幸福,
领略痛楚,回忆一生 .

文章的话是现写的,每篇文章我都会说的很细致,所以花费的时间比较久,一般都是两个小时以上。

原创不易,再次谢谢大家的支持。

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

在我主页左下角的联系模块中,联系我。或者私信我。

❤️【Python】精彩解析拉钩网反反爬虫,❤️采集各行业招聘数据,分析行业行情❤️相关推荐

  1. python 爬取拉钩网数据

    python 爬取拉钩网数据 完整代码下载:https://github.com/tanjunchen/SpiderProject/blob/master/lagou/LaGouSpider.py # ...

  2. Python爬虫实战,requests模块,爬虫采集网易财经股票交易数据

    前言 本文给大家分享的是如何通过Python爬虫采集网易财经易数据 开发工具 Python版本: 3.8 相关模块: requests模块 parsel模块 环境搭建 安装Python并添加到环境变量 ...

  3. 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

    文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...

  4. python 网上爬取数据源码_Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章...

    1.最简单的Python爬虫 最简单的Python爬虫莫过于直接使用urllib.request.urlopen(url=某网站)或者requests.get(url=某网站)例如:爬取漫客栈里面的漫 ...

  5. Python笔记-获取拉钩网南京关于python岗位数据

    FIddler抓包如下: 程序打印如下: 源码如下: import re import requestsclass HandleLaGou(object):def __init__(self):sel ...

  6. python数据抓取技术与实战训练_师傅带徒弟学Python:项目实战1:网络爬虫与抓取股票数据...

    本视频基于**Python 3.X版本 本视频课程是第四篇第一个实战项目,内容包括网络爬虫技术.使用urllib爬取数据.使用Selenium爬取数据.使用正则表达式.使用BeautifulSoup库 ...

  7. python成功爬取拉勾网——初识反爬(一个小白真实的爬取路程,内容有点小多)

    python成功爬取拉勾网(一个小白的心里路程) 最开始想爬取拉钩是因为半年前上python实验课的时候,老师给了两个任务,一个时爬取糗百的笑话内容,另一个时爬取拉勾网的职位信息,当时因为课时紧张的缘 ...

  8. 爬虫项目实战:拉钩网职位需求采集

    文章目录 需求分析 项目简介 职位需求页面分析 PositionId 数据采集 真实的URL获取 请求头信息 表单信息 返回的JSON数据 PositionId 页面解析 数据分析 可视化中文显示问题 ...

  9. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

最新文章

  1. 深度解密Go语言之unsafe
  2. Java注解(1)-注解基础
  3. LINUX 内核代码备忘录
  4. java rsa 117_java实现RSA非对称加密解密
  5. 解决Linux下vi或vim操作Found a swap file by the name
  6. Cloud一分钟 | 华云数据中标上药控股私有云千万级项目; 总投资90亿元的中国移动厦门数据中心,一期电源工程项目候选人公示...
  7. php output_add_rewrite_var
  8. X大佬:建议被降级降薪员工主动辞职,网友炸了
  9. JAVA:事件监听器之练习
  10. eclipse快捷键使用
  11. 如何让百度快速收录网站及文章
  12. 孙子兵法--你如何来做好事情
  13. centos添加互信
  14. [实战]制作简单的公众号二维码关注图
  15. element上传图片的时候额外参数
  16. Client MFC application解决办法
  17. 带宽与宽带的区别是什么?
  18. 第十六届中国大数据技术大会五大分论坛顺利举办!
  19. 局域网安全之ARP攻击
  20. linux中的tar打包、压缩多个文件、磁盘查看和分区类、du查看文件和目录占用的磁盘空间

热门文章

  1. php---魔术方法(__wakeup和__sleep)
  2. 位,字,字节 到底是什么?
  3. “看不见的眼睛”——电脑监控软件能做什么?
  4. 2015年下半年阅读书单
  5. 哥斯达黎加共和国政府系统遭勒索攻击,引发混乱
  6. AD19 Warning : Adding hidden net, Adding items to hidden net, Component has unused sub-part
  7. 1251: [蓝桥杯2015初赛]星系炸弹 【简单】
  8. 如何在csdn关掉百度广告
  9. edusoho网校系统部署总结
  10. JAVA中的request用法_新手入门:介绍JSP中request属性的用法