【Python从入门到进阶】46、58同城Scrapy项目案例介绍

接上篇《45、Scrapy框架核心组件介绍》
上一篇我们学习了Scrapy框架的核心组件的使用。本篇我们进入实战第一篇,以58同城的Scrapy项目案例,结合实际再次巩固一下项目结构以及代码逻辑的用法。

一、案例网站介绍

58同城是一个生活服务类平台,涉及广泛的服务领域,从找工作、租房、买卖二手物品,到寻找兴趣伙伴,它都为用户提供了便捷的通道。58同城网站的信息量巨大,每天都有大量的用户在这里发布和浏览信息,包含丰富的生活服务选择。无论是家政服务、维修服务,还是教育培训、旅游出行,用户都能在58同城上找到对应的合作伙伴。

二、抓取案例分析

我们在58同城首页上方的搜索框中,搜索“后端开发”词条,可以看到跳转到了招聘板块,并在下方可以看到相应的职位推荐信息:

该信息是一个自上而下的列表,我们F12查看开发者信息,再次点击“搜职位”按钮,发现没有找到对饮的接口信息:

这说明该页面的搜索结果不是ajax异步的,而是请求服务器后,直接渲染出带结果的html界面了。所以该页面的地址栏信息,就是我们需要获取数据的请求地址:
https://zz.58.com/quanzhizhaopin/?key=%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91&classpolicy=strategy%2Cuuid_939eb358a0a14d338d323bb1480419b1%2Cdisplocalid_342%2Cfrom_674%2Cto_jump%2Ctradeline_job%2Cclassify_E&search_uuid=939eb358a0a14d338d323bb1480419b1&final=1
这个地址返回的就是带有职位信息的html报文:

三、创建58同城的Scrapy项目

我们来创建一下58同城Scrapy爬虫项目。首先我们打开PyCharm编辑器,在命令控制台咱们的代码文件夹下,运行“scrapy startproject scrapy_58tc_01”指令,创建Scrapy项目:

前往左侧项目区域,可以看到项目已经创建成功:

这里我们再回顾一下项目下每一个目录和文件的作用:

然后我们创建爬虫文件,进入项目文件夹的spiders文件夹,然后通过“scrapy genspider tc https://zz.58.com/quanzhizhaopin/?key=%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91&classpolicy=strategy%2Cuuid_939eb358a0a14d338d323bb1480419b1%2Cdisplocalid_342%2Cfrom_674%2Cto_jump%2Ctradeline_job%2Cclassify_E&search_uuid=939eb358a0a14d338d323bb1480419b1&final=1”指令,创建一个58同城招聘页面的爬虫文件:

我们发现报错了,需要咱们将&符号,用双引号括起来,因为&是scrapy命令中的的运算符,需要与字符串作区分:
scrapy genspider tc https://zz.58.com/quanzhizhaopin/?key=%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91"&"classpolicy=strategy%2Cuuid_939eb358a0a14d338d323bb1480419b1%2Cdisplocalid_342%2Cfrom_674%2Cto_jump%2Ctradeline_job%2Cclassify_E"&"search_uuid=939eb358a0a14d338d323bb1480419b1"&"final=1
我们修改后重新执行:

发现创建成功:

基础代码:

import scrapyclass TcSpider(scrapy.Spider):name = "tc"allowed_domains = ["zz.58.com"]start_urls = ["https://zz.58.com/quanzhizhaopin/?key=%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91&classpolicy=strategy%2Cuuid_939eb358a0a14d338d323bb1480419b1%2Cdisplocalid_342%2Cfrom_674%2Cto_jump%2Ctradeline_job%2Cclassify_E&search_uuid=939eb358a0a14d338d323bb1480419b1&final=1"]def parse(self, response):pass

然后我们把setting.py配置文件的遵守robot协议的配置,改成False,防止反扒协议导致爬取不成功:

ROBOTSTXT_OBEY = False

接下来我们就可以在爬虫文件中,编写我们获取职位列表信息的代码了。

四、编写爬虫的案例

这里我们在上面创建好的爬虫程序中,编写获取职位列表的代码逻辑。这里我们主要用到了response的以下几个方法:

response的属性和方法
●response.text  获取的是响应的字符串
●response.body  获取的是二进制数据
●response.xpath  可以直接使用xpath方法来解析response中的内容
●response.extract()  提取seletor对象的data属性值
●response.extract_first()  提取的seletor列表的第一个数据

下面我们先来通过网页的xpath工具,获取职位列表的xpath语句(具体xpath使用及浏览器插件安装,详见我之前的博文《【Python从入门到进阶】28、xpath的安装以及使用》)。
首先我们获取职位的list列表,这里我们F12打开开发者模式,定位到职位列表代码,copy一下职位列表的xpath:

代码://*[@id="list_con"]
然后我们剖析里面的每一个li,发现他们的对应关系:

此时我们用xpath工具测试一下,我们获取其中一个字段的效果:

此时我们就知道了每个内容的获取方式,下面开始写代码:

import scrapyclass TcSpider(scrapy.Spider):name = "tc"allowed_domains = ["zz.58.com"]start_urls = ["https://zz.58.com/quanzhizhaopin/?key=%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91&classpolicy=strategy%2Cuuid_939eb358a0a14d338d323bb1480419b1%2Cdisplocalid_342%2Cfrom_674%2Cto_jump%2Ctradeline_job%2Cclassify_E&search_uuid=939eb358a0a14d338d323bb1480419b1&final=1"]def parse(self, response):print("=======爬虫结果开始=======")text = response.textif text.find("访问过于频繁") != -1:print("访问过于频繁,等5-10分钟后再试")else:list_con = text.xpath('//*[@id="list_con"]/li')_id = 0for con in list_con:_id += 1print(f"【第{_id}份工作信息】:")job_name = con.xpath('.//div[@class="job_name clearfix"]/a/text()')  # 获取工作名称print("【工作名称】:",str(job_name[0]).replace('\r', '').replace('\n', '').replace(' ', ''))  # 去除换行符和回车符,以及多余空格job_salary = con.xpath('.//p[@class="job_salary"]/text()')  # 获取工作薪水print("【工作薪水】:", job_salary[0])job_wel_list = con.xpath('.//div[@class="job_wel clearfix"]/span')  # 获取工作标签job_wel = ""for job_wel_item in job_wel_list:job_wel += str(job_wel_item.text).strip() + " "print("【工作标签】:", job_wel)comp_name = con.xpath('.//div[@class="comp_name"]/a/text()')  # 获取招聘公司名称print("【招聘公司名称】:",str(comp_name[0]).replace('\r', '').replace('\n', '').replace(' ', ''))  # 去除换行符和回车符,以及多余空格job_require_list = con.xpath('.//p[@class="job_require"]/span')  # 获取招聘要求job_require = ""for job_require_item in job_require_list:job_require += str(job_require_item.text).strip() + " "print("【招聘要求】:", job_require)print("=======爬虫结果结束=======")

执行“scrapy crawl tc”运行爬虫程序,效果:

结果信息(以前三个为例):
=======爬虫结果开始=======
【第1份工作信息】:
【工作名称】: 高新区|web前端
【工作薪水】: 4000-6000
【工作标签】: 五险一金 周末双休 年底双薪 包住 房补
【招聘公司名称】: 河南云和数据信息技术有限公司
【招聘要求】: Web前端 大专 不限
【第2份工作信息】:
【工作名称】: 新通桥|后端软件开发
【工作薪水】: 5000-8000
【工作标签】: 五险一金 周末双休 年底双薪 包住 房补
【招聘公司名称】: 郑州氪亘信息技术有限公司
【招聘要求】: JAVA开发 大专 不限
【第3份工作信息】:
【工作名称】: 高新区|JAVA开发带薪实习
【工作薪水】: 4000-6000
【工作标签】: 五险一金 包住 周末双休 年底双薪 饭补
【招聘公司名称】: 河南猫匠网络科技有限公司
【招聘要求】: JAVA开发 大专 不限
................
如果调试次数过多,会报这个错:

这是58同城前端为了防止爬虫抓取的屏蔽措施,这里我们需要等一段时间再实验(或者换一个网络或者使用代理访问,换网络后,上面的url地址要重新复制)。
注:如果访问不到页面,可以下载我保存好的html页面,并用直接获取html文件的方式先测试一下,下面是html文件和测试爬虫逻辑代码的下载:

58同城搜索页静态html代码爬虫xpath测试demoicon-default.png?t=N7T8https://download.csdn.net/download/u013517797/88713719

至此,58同城的Scrapy项目案例讲解完毕。

转载请注明出处:https://guangzai.blog.csdn.net/article/details/135440258

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

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

相关文章

【分布式】分布式链路跟踪技术

为什么需要分布式链路追踪 提到分布式链路追踪,我们要先提到微服务。相信很多人都接触过微服务。微服务是一种开发软件的架构和组织方法,它侧重将服务解耦,服务之间通过API通信。使应用程序更易于扩展和更快地开发,从而加速新功能…

Go-gin-example 添加注释 第一部分 新建项目及api编写

文章目录 go-gin-example环境准备初始化 Go Modules基础使用 gin 安装测试gin是否引入 gin搭建Blog APIsgo-ini简述配置文件 阶段目标 编写简单API错误码包 完成一个demo初始化项目初始化项目数据库编写项目配置包拉取go-ini配置包在conf目录下新建app.ini文件,写入…

【操作系统篇】什么是分段和分页

什么是分段和分页 ✔️ 典型解析✔️分页✔️页表✔️分段(Segmentation)✔️ 分段和分页的区别✔️分页和分段哪个更耗资源✔️它们对性能的影响是怎样的✔️分段和分页分别适合什么场景 ✔️ 典型解析 在操作系统中,分段和分页是两种不同的…

在做题中学习(43):长度最小的子数组

LCR 008. 长度最小的子数组 - 力扣(LeetCode) 解法:同向双指针-------滑动窗口算法 解释:本是暴力枚举做法,因为全部是正整数,就可以利用单调性和双指针解决问题来节省时间 思路: 如上面图&am…

ES -极客学习

Elasticsearch 简介及其发展历史 起源 Lucene 于 Java 语言开发的搜索引擎库类创建于 1999 年,2005 年成为 Apache 顶级开源项目Lucene 具有高性能、易扩展的优点Lucene 的局限性 只能基于 Java 语言开发类库的接口学习曲线陡峭原生并不支持水平扩展原生并不支持水…

如何找到 niche 出海细分市场的 IDEA

先说结论就是:看榜单 Why:为什么看榜单? 大家会问为什么?原因很简单: 熟读唐诗三百首,不会作诗也会吟不天天看榜单上相关的优秀同行,你想干啥 心法就是下苦功夫坚持,量变引起质变…

Nginx 文件名逻辑漏洞(CVE-2013-4547)

目录 Nginx 文件名逻辑漏洞(CVE-2013-4547) 1.cd到CVE-2013-4547 2.执行docker-compose up -d 3.查看靶场是否开启成功 4.访问浏览器 5.上传含有一句话木马的图片 6.burp抓包 7.在shell.gif加空格 8.放包 9.访问路径 10.继续抓包 11.在aa后面…

优化器(一)torch.optim.SGD-随机梯度下降法

torch.optim.SGD-随机梯度下降法 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoaderdataset torchvision.datasets.CIFAR10(root./data, trainFalse, downloadTrue,transformtorchvision.transforms.ToTensor()) data…

2、Excel:基础概念、表格结构与常见函数

数据来源:八月成交数据 数据初探 业务背景 数据来源行业:金融行业(根据应收利息和逾期金额字段来判断) 可以猜测: 业务主体:某互联网金融公司(类似支付宝)也业务模式:给…

群晖安装MariaDB

群晖安装MariaDB 在套件中心安装MariaDB给root开启远程访问权限使用工具连接数据库 在套件中心安装MariaDB 给root开启远程访问权限 # ssh 登陆群晖后执行下面操作 $ mysql -uroot -p[数据库密码] $ use mysql; $ select User,authentication_string,Host from user; # 查看账…

【数据结构—排序—交换排序】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、排序的概念及其运用 1、排序的概念 2、排序运用 3、 常见的排序算法 二、交换排序 1、冒泡排序 1.1算法讲解 1.2冒泡排序的实现: 1.2.1头文件的…

web前端开发技术复习问答题

目录 1.简述常见单标签和双标签有哪些? 2.常见块级元素和行级元素有哪些? 3.简述常见的列表有哪些?他们有什么区别? 4.简述超链接的href属性值如何设置?有什么区别 5.CSS基本语法 6. css中常见的引入方式有几种&…

程序员做私活赚外快的好地方,今天推荐几个

你们当程序员不会都拿着几千、万把块钱的死工资吧,今天为大家分享一些可以接私单的平台,我反正已经赚麻了。 如果你的工作相对没那么费时间,可以空闲的时候去接点私活。或者是还没有找工作之前,可以通过一些平台接一些兼职&#…

【STM32】PWR电源控制

1 PWR简介 PWR(Power Control)电源控制 PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到P…

回首2023,厉兵秣马,启航2024

目录 回首风波的20232023,感恩相遇暂停发文发文狂潮感恩有你备战2024学习之余跆拳道比赛做手工diy 学习心路年初学习伊始心路其后学习后来心路 必须看配图说明 未知的2024Flag 回首风波的2023 2023,感恩相遇 还记得,22年末,23年…

基于gitlab 12.8.0版本的完整镜像过程

目前已在一台服务器上安装了gitlab 12.8.0,并且稳定运行了有几年了,其上面也创建了大量的项目。目前要求对该gitlab及其上面的所有仓库做一个完整的镜像。具体操作过程如下: 1、确认现有的gitlab的版本号 2、到gitlab官网下载相同版本号的gi…

GitLab添加SSH key

SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。 SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。 ssh-keygen 从客户端来看,SSH提供两种级…

【信息论与编码】习题-判断题-第三部分

目录 判断题48. 利用状态极限稳态分布概率和符号的状态一步转移概率来求m阶马尔可夫信源的极限熵。49. 连续信源或模拟信号的信源编码的理论基础是限失真信源编码定理 。50. 具有一一对应关系的无噪信道的信道容量CH(X)。51. 在游程编码过程中,“0”游程和“1”游程…

使用pytorch构建图卷积网络预测化学分子性质

在本文中,我们将通过化学的视角探索图卷积网络,我们将尝试将网络的特征与自然科学中的传统模型进行比较,并思考为什么它的工作效果要比传统的方法好。 图和图神经网络 化学或物理中的模型通常是一个连续函数,例如yf(x₁&#xff…

定展中2024上海国际智慧工地展览会

2024第十五届上海国际智慧工地展览会 2024 Shanghai International Smart Site Equipment Expo 时间:2024年03月26日-28日 地点:上海跨国采购会展中心 政策指导: 中华人民共和国国家发展和改革委员会 中华人民共和国工业和信息化部 上海城市数字转型应用…