详解如何使用Python网络爬虫获取招聘信息
作者:Python爬虫与数据挖掘 发布时间:2021-09-28 06:58:17
前言
现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息。可是招聘信息有一些是错综复杂的。而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰。
项目目标
获取招聘信息,并批量把地点、 公司名、工资 、下载保存在txt文档。
项目准备
软件:PyCharm
需要的库:requests、lxml、fake_useragent
网站如下:
https://gz.58.com/job/pn2/?param7503=1&from=yjz2_zhaopin&PGTID=0d302408-0000-3efd-48f6-ff64d26b4b1c&ClickID={}
点击下一页时,ClickID={}每增加一页自增加1,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。
反爬措施
该网站上的反爬主要有两点:
1、 直接使用requests库,在不设置任何header的情况下,网站直接不返回数据
2、同一个ip连续访问多次,直接封掉ip,起初我的ip就是这样被封掉的。
为了解决这两个问题,最后经过研究,使用以下方法,可以有效解决。
1、获取正常的 http请求头,并在requests请求时设置这些常规的http请求头。
2、使用 fake_useragent ,产生随机的UserAgent进行访问。
项目实现
1、定义一个class类继承object,定义init方法继承self,主函数main继承self。导入需要的库和网址,代码如下所示。
import requests
from lxml import etree
from fake_useragent import UserAgent
class Zhaopin(object):
def __init__(self):
self.url = "https://gz.58.com/job/pn2/?param7503=1&from=yjz2_zhaopin&PGTID=0d302408-0000-3efd-48f6-ff64d26b4b1c&ClickID={}" # /zhuanchang/:搜索的名字的拼音缩写
def main(self):
pass
if __name__ == '__main__':
Spider = Zhaopin()
Spider.main()
2、随机产生UserAgent。
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
3、发送请求,获取响应, 页面回调,方便下次请求
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
return html
4、xpath解析找到对应的父节点。
def page_page(self, html):
parse_html = etree.HTML(html)
one = parse_html.xpath('//div[@class="main clearfix"]//div[@class="leftCon"]/ul/li')
5、for遍历,定义一个变量food_info保存,获取到二级页面对应的菜 名、 原 料 、下 载 链 接
for l in one:
o = l.xpath('.//a/span[1]/text()')[0].strip()
t = l.xpath('.//a//span[@class="name"]/text()')[0].strip()
f = l.xpath('.//p[@class="job_salary"]/text()')
thr = l.xpath('.//div[@class="comp_name"]//a/text()')[0].strip()
for e in f:
boss = '''
%s:||%s:
公司:%s,
工资:%s元/月
=========================================================
''' % (o, t, thr, e)
print(str(boss)
6、将结果保存在txt文档中,如下所示。
f = open('g.txt', 'a', encoding='utf-8') # 以'w'方式打开文件
f.write(str(boss))
# print(house_dict)
f.write("\n") # 键和值分行放,键在单数行,值在双数行
f.close()
7、调用方法,实现功能。
html = self.get_page(url)
self.page_page(html)
效果展示
1、点击绿色小三角运行输入起始页,终止页。
2、运行程序后,结果显示在控制台,如下图所示。
3、保存txt文档到本地,如下图所示。
4、双击文件,内容如下图所示。
小结
1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。
2、本文章就Python爬取招聘网,在应用中出现的难点和重点,以及如何防止反爬,做出了相对于的解决方案。
3、介绍了如何去拼接字符串,以及列表如何进行类型的转换。
4、代码很简单,希望能够帮到你。
5、欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。
6、可以选择自己喜欢的分类,获取工作,找到自己喜欢工作。
来源:https://mp.weixin.qq.com/s/FGn8NTitkSIxpmJZisGDtg
猜你喜欢
- 本文实例为大家分享了python实现简单计算器的具体代码,供大家参考,具体内容如下今天学习到python中界面设计部分,常用的几种图形化界面
- 自定义函数import requestsfrom bs4 import BeautifulSoupheaders={'User-Ag
- 关于建立索引的几个准则:1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。2、索引越多,更新数据的速度越慢
- 神经网络框架使用方法及设计思想在框自己手写架上基本模仿pytorch,用以学习神经网络的基本算法,如前向传播、反向传播、各种层、各种激活函数
- 1、环境搭建需安装:python3.6Pycharm专业版django 2.2.6mysqlclientpip install django
- 在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。尽管 ORDER BY
- SQL Server执行动态SQL的话,应该如何实现呢?下面就为您介绍SQL Server执行动态SQL两种正确方式,希望可以让您对SQL
- 1、Model signalsdjango.db.models.signales 作用于django的model操作上的一系列信号1)pre
- FlashPaper 是Macromedia推出的一款电子文档类工具,通过使用本程序,你可以将需要的文档通过简单的设置转换为SWF格式的Fl
- 所有软件的版本一直会升级,注意自己当时的版本是不是已经更新了。首先装centos7如果你忘了设置swap分区,下面的文章可以教你怎么补一个上
- 使用Resample函数转换时间序列 一、什么是resample函数?它是Python数据分析库Pandas的方法函数。它主要用于
- sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分.处理命令行参数在解释器启动后, argv 列表包含了传递给脚本的
- datetime 和 smalldatetime 代表日期和一天内的时间的日期和时间数据类型。 Microsoft SQL Server 用
- vue+element表格实现多层数据嵌套今天用element的表格渲染了商城的购物车列表,element的表格之前也用到过,它把所有的东西
- 前言 绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer、Share P
- 1、要连接MySql数据库必须首先下载MySql官方的连接.net的文件,文件下载地址为http://dev.mysql.com/downl
- using System; using System.Collections; using System.Configuration; us
- 总结大家都知道,在开发中提供用户登录以及维护用户的登录状态,是一个拥有用户系统的软件应用普遍需要做的事情。像微信这样的一个社交平台,如果做一
- 创建SQL存储过程需要使用到的语法- 创建存储过程CREATE 存储过程的名称(参数)BEGIN...需要执行的SQL语句END- 调用CA
- 推荐阅读:使用python检测主机存活端口及检查存活主机下面给大家分享使用python语言实现获取主机名根据端口杀死进程代码。ip=os.p