网络爬虫--24.【selenium实战】实现拉勾网爬虫之--分析接口获取数据

文章目录

  • 一. 思路概述
  • 二. 分析数据接口
  • 三. 详细代码

一. 思路概述

1.拉勾网采用Ajax技术,加载网页时会向后端发送Ajax异步请求,因此首先找到数据接口;

2.后端会返回json的数据,分析数据,找到单个招聘对应的positionId,拼接出具体的url;

3.解析url,使用xpath获取数据。

二. 分析数据接口

在这里插入图片描述

在这里插入图片描述

三. 详细代码

#encoding: utf-8import requests
from lxml import etree
import time
import reheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',"Referer": 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',"Cookie": 'user_trace_token=20200524155122-083f0df9-307f-44ee-8266-fceb6af1028b; _ga=GA1.2.728245592.1590306686; LGUID=20200524155125-3d15f82a-9111-4024-98da-9c1422b856dd; JSESSIONID=ABAAAECABFAACEA42866F7C54F46B971C0B595641303F73; WEBTJ-ID=20200524155129-17245aa50d74ec-0946ac3961652a-f7d1d38-1327104-17245aa50d980; RECOMMEND_TIP=true; _gid=GA1.2.369120051.1590306690; index_location_city=%E5%8C%97%E4%BA%AC; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2217245aab6d623b-09a44787242115-f7d1d38-1327104-17245aab6d7237%22%2C%22%24device_id%22%3A%2217245aab6d623b-09a44787242115-f7d1d38-1327104-17245aab6d7237%22%7D; sajssdk_2015_cross_new_user=1; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1590306685,1590324851; LGSID=20200524205410-e3cbacc7-ae0f-4d56-a775-67d45085e31d; PRE_UTM=m_cf_cpt_baidu_pcbt; PRE_HOST=sp0.baidu.com; PRE_SITE=https%3A%2F%2Fsp0.baidu.com%2F9q9JcDHa2gU2pMbgoY3K%2Fadrc.php%3Ft%3D06KL00c00fA1VH%5F0w3dM0FNkUsKEU%5FGX00000rUBx7C00000xs000y.THL0oUhY1x60UWY3rj04n1cdnNtzndqCmyqxTAT0T1dhmymYmhm1P10snH6dmvR10ZRqfbwDfHuDPWnsnRP7f1uDPbfLrDc1rHPDPjfknY7ArjD0mHdL5iuVmv-b5Hn1PWRzP1DYnHThTZFEuA-b5HDv0ARqpZwYTZnlQzqLILT8UA7MULR8mvqVQvk9UhwGUhTVTA7Muiqsmzq1uy7zmv68pZwVUjqdIAdxTvqdThP-5ydxmvuxmLKYgvF9pywdgLKWmMf0mLFW5HR4PWRs%26tpl%3Dtpl%5F11534%5F22672%5F17382%26l%3D1518133990%26attach%3Dlocation%253D%2526linkName%253D%2525E6%2525A0%252587%2525E5%252587%252586%2525E5%2525A4%2525B4%2525E9%252583%2525A8-%2525E6%2525A0%252587%2525E9%2525A2%252598-%2525E4%2525B8%2525BB%2525E6%2525A0%252587%2525E9%2525A2%252598%2526linkText%253D%2525E3%252580%252590%2525E6%25258B%252589%2525E5%25258B%2525BE%2525E6%25258B%25259B%2525E8%252581%252598%2525E3%252580%252591%2525E5%2525AE%252598%2525E6%252596%2525B9%2525E7%2525BD%252591%2525E7%2525AB%252599%252520-%252520%2525E4%2525BA%252592%2525E8%252581%252594%2525E7%2525BD%252591%2525E9%2525AB%252598%2525E8%252596%2525AA%2525E5%2525A5%2525BD%2525E5%2525B7%2525A5%2525E4%2525BD%25259C%2525EF%2525BC%25258C%2525E4%2525B8%25258A%2525E6%25258B%252589%2525E5%25258B%2525BE%21%2526xp%253Did%28%252522m3365271417%5Fcanvas%252522%29%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FH2%25255B1%25255D%25252FA%25255B1%25255D%2526linkType%253D%2526checksum%253D154%26ie%3Dutf-8%26f%3D8%26tn%3D88093251%5F23%5Fhao%5Fpg%26wd%3D%25E6%258B%2589%25E5%258B%25BE%25E7%25BD%2591%26oq%3D%25E6%258B%2589%25E5%258B%25BE%25E7%25BD%2591%26rqlang%3Dcn; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2Flanding-page%2Fpc%2Fsearch.html%3Futm%5Fsource%3Dm%5Fcf%5Fcpt%5Fbaidu%5Fpcbt; TG-TRACK-CODE=index_search; X_HTTP_TOKEN=50fc797f56a45533494523095182b5415766d31319; _gat=1; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1590325496; LGRID=20200524210515-c04502d0-30cb-4056-bbd3-4d96e0564e1e; SEARCH_ID=00630409e0a54ce59315f7af9b9fcce1','Origin': 'https://www.lagou.com',"X-Anit-Forge-Code": "0","X-Anit-Forge-Token": "None",'X-Requested-With': "XMLHttpRequest"
}def request_list_page():url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false'data = {'first': "false",'pn': 1,'kd': 'python'}for x in range(1,21):data['pn'] = xresponse = requests.post(url, headers=headers, data=data)# print(type(response))# json方法:如果返回来的是json数据。那么这个方法会自动的load成字典result = response.json()# print(result)positions = result['content']['positionResult']['positionId']for position in positions:positionId = position['positionId']position_url = 'https://www.lagou.com/jobs/%s.html' % positionIdprint(position_url)parse_postion_detail(position_url)breakbreakdef parse_postion_detail(url):positions = []response = requests.get(url,headers=headers)text = response.texthtml = etree.HTML(text)position_name = html.xpath("//span[@class='name']/text()")[0]job_request_spans = html.xpath("//dd[@class='job_request']//span")salary = job_request_spans[0].xpath('.//text()')[0].strip()city = job_request_spans[1].xpath(".//text()")[0].strip()city = re.sub(r"[\s/]","",city)work_years = job_request_spans[2].xpath(".//text()")[0].strip()work_years = re.sub(r"[\s/]","",work_years)education = job_request_spans[3].xpath(".//text()")[0].strip()education = re.sub(r"[\s/]","",education)desc = "".join(html.xpath("//dd[@class='job_bt']//text()")).strip()position = {'name': position_name,'salary': salary,'city': city,'work_years': work_years,'education': education,'desc': desc}positions.append(position)print(position)print('=' * 40)def main():request_list_page()if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj 1999: [Noip2007]Core树网的核【树的直径+单调队列】

我要懒死了&#xff0c;所以依然是lyd的课件截图 注意是min{max(max(d[uk]),dis(u1,ui),dis(uj,un))}&#xff0c;每次都从这三个的max里取min #include<iostream> #include<cstdio> using namespace std; const int N500005; int n,m,h[N],cnt,d[N],s,t,mx,f[N],a…

Java 设计模式-【单例模式】

单例解决了什么问题&#xff1a;为了节约系统资源&#xff0c;有时需要确保系统中某个类只有唯一一个实例&#xff0c;当这个唯一实例创建成功之后&#xff0c;我们无法再创建一个同类型的其他对象&#xff0c;所有的操作都只能基于这个唯一实例。为了确保对象的唯一性&#xf…

网络爬虫--26.Scrapy中下载器中间件Downloader Middlewares的使用

文章目录一. Downloader Middlewares二. 设置随机请求头三. ip代理池中间件一. Downloader Middlewares 二. 设置随机请求头 三. ip代理池中间件

解决eclipse配置Tomcat时找不到server选项(Mars.2也可用)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 集成Eclipse和Tomcat时找不到server选项&#xff1a; 按照网上的步骤如下&#xff1a; 在Eclipse中&#xff0c;窗口(window)——首选项…

网络爬虫--27.csv文件的读取和写入

文章目录一. csv文件二. 读取csv文件的两种方式三. 写入csv文件的两种方式一. csv文件 二. 读取csv文件的两种方式 import csvdef read_csv_demo1():with open(classroom1.csv,r,encodingutf-8,newline) as fp:# reader是一个迭代器reader csv.reader(fp)next(reader)for x i…

Quiver快速入门

Quiver快速入门 装载自&#xff1a;https://github.com/HappenApps/Quiver/wiki/Quiver%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8Quiver 是一个程序员专用的记事本应用&#xff0c;可轻松混合文本、代码、Markdown、LaTeX 到一个记事本中。提供强大的代码编辑功能&#xff0c;以及…

配置SQL Server的身份验证方式

下面的文章来源于网络&#xff0c;讲的是怎样配置SQL Server 2005登陆验证方式&#xff0c;但是内容同样适用于SQL Server 2008. 配置SQL Server的身份验证方式 在默认情况下&#xff0c;SQL Server 2005 Express是采用集成的Windows安全验证且禁用了sa登录名。为了工作组环境下…

数据结构与算法--5.Python实现十大排序算法

文章目录0. 相关概念一. 冒泡排序二. 选择排序三. 插入排序四. 希尔排序五. 快速排序六. 归并排序七. 其他0. 相关概念 稳定&#xff1a;如果a原本在b前面&#xff0c;而ab&#xff0c;排序之后a仍然在b的前面。不稳定&#xff1a;如果a原本在b的前面&#xff0c;而ab&#xf…

JSON与XML的区别比较

1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type defini…

I/O流讲解

本文来自&#xff1a;曹胜欢博客专栏&#xff1a;http://blog.csdn.net/csh624366188 在软件开发中&#xff0c;数据流和数据库操作占据了一个很重要的位置&#xff0c;所以&#xff0c;熟悉操作数据流和数据库&#xff0c;对于每一个开发者来说都是很重要的&#xff0c;今天就…

Spring Boot入门(9)网页版计算器

介绍 在写了前八篇Spring Boot项目的介绍文章后&#xff0c;我们已经初步熟悉了利用Spring Boot来做Web应用和数据库的使用方法了&#xff0c;但是这些仅仅是官方介绍的一个例子而已。   本次分享将介绍笔者自己的一个项目&#xff1a;网页版计算器&#xff0c;以这两篇博客…

数据结构与算法--6.二分查找

文章目录一. 二分查找二. 代码实现一&#xff1a;使用递归三. 代码实现二&#xff1a;非递归一. 二分查找 二. 代码实现一&#xff1a;使用递归 def binary_search(alist, item):"""二分查找&#xff1a;使用递归"""n len(alist)if n > 0:m…

SpringMVC请求处理流程、springMVC工作流程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 页面请求到来 --> 前端控制器&#xff08;DispatcherServlet&#xff09;收到请求&#xff0c;请求 处理映射器&#xff08;Hanle…

数据结构与算法--7.树的基础知识

文章目录一. 树的概念二. 树的术语三. 树的种类四. 树的存储和表示五. 常见的树的应用场景一. 树的概念 二. 树的术语 三. 树的种类 四. 树的存储和表示 五. 常见的树的应用场景

数据结构与算法--8.二叉树的基础知识

文章目录一. 二叉树基本概念二. 二叉树的性质三. 二叉树的代码实现四. 二叉树的先序、中序、后序遍历一. 二叉树基本概念 二. 二叉树的性质 三. 二叉树的代码实现 class Node(object):"""二叉树节点"""def __init__(self,item):self.elem item…

ZooKeeper(二)ZooKeeper能做什么?

上一节介绍了ZooKeeper的一些基础知识&#xff0c;这一节主要讲ZooKeeper有哪些用途。命名服务&#xff08;Name Service&#xff09; 主要是作为分布式命名服务&#xff0c;通过调用zk的create node api&#xff0c;能够很容易创建一个全局唯一的path&#xff0c;这个path就可…

jquery vilidate 使用小例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 // 修改$("#updForm").validate({submitHandler:function(form){new $.flavr({ content : 是否确认修改管理员?,dialog : co…