使用生产者与消费者模式爬取腾讯招聘网的招聘信息

使用MKL+Eigen求解稀疏矩阵方程组 问题:求解Ax=b的解,其中,A为大型稀疏矩阵,长和宽分别为1500^2。 一般思路: (1)A为对称正定矩阵,对A使用cholesky分解。 (2)A为对称不定矩阵,使用LDL‘分解,即: PAP'=LDL' 其中,L为单位下三角矩阵,D由阶数为1或者2的对角块构成,P是置换矩阵。 (3)不对称矩阵:LU分解。 (4)长方形矩阵(长... 阅读详情

腾讯招聘:https://careers.tencent.com/

目录

1.找接口

2.生产者与消费者模式分析

3.生产者

4.消费者

5.主函数


1.找接口

我们去腾讯招聘网站去找有关python的招聘信息,在搜索框输入python,接口变成:

https://careers.tencent.com/search.html?keyword=python

我们用这个接口直接去请求网页资源的话,会发现没有数据,只抓到了网页的框架

代码如下:

import requests
from lxml import etree

url = 'https://careers.tencent.com/search.html?keyword=python'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
content = response.content.decode('utf-8')
with open('job.html', 'w', encoding='utf-8') as fp:
    fp.write(content)

我们上述代码中把请求到网页的内容保存到了job.html

程序运行完之后,点开job.html 在浏览器中打开:效果如下

这种情况很有可能是ajax请求,我们需要重新去找接口

打开F12  network-->XHR  找到如下:

找一下请求头的链接:

https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1557450635595&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=python&pageIndex=1&pageSize=10&language=zh-cn&area=cn

这个接口里面有很多参数,我们可以删去没有用的,pageIndex 是用来传页码的,我们可以直接传页码

https://careers.tencent.com/tencentcareer/api/post/Query?keyword=python&pageIndex={}&pageSize=10

重新开始请求,ajax请求响应回来的是json数据格式

2.生产者与消费者模式分析

我们在整个过程需要请求接口,然后再解析数据

生产者用来请求接口,消费者用来解析数据

3.生产者

从page_queue里面取出来page,拼接好url

# 1.写子类  需要继承父类Thread类  复写run()方法
class Thread_producer(threading.Thread):
    def __init__(self, name, page_queue):
        # 参数一般以简短为主,所以选page
        threading.Thread.__init__(self)
        # 拿到任务队列
        self.page_queue = page_queue
        self.name = name

    def run(self):
        # 开始时间
        time_start = time.time()
        print(self.name, "开始时间:", time_start)
        while True:
            if self.page_queue.empty():
                break
            else:
                print('当前的线程:', self.name, "将要从队列中取任务")
                page = self.page_queue.get()
                print(self.name, "将要从队列中取任务是:", page)
                url = 'https://careers.tencent.com/tencentcareer/api/post/Query?keyword=python&pageIndex={}&pageSize=10'.format(
                    page)
                self.get_content(url=url)
                print(self.name, '完成的任务是', page)
        time_end = time.time()
        print(self.name, '完成时间是:', time_end)
        print(self.name, '耗时是:', time_end - time_start)

    def get_content(self, url):
        headers = {
            'user - agent': 'Mozilla / 5.0(Windows NT 6.1;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 74.0.3729.108Safari / 537.36'
        }
        response = requests.get(url=url, headers=headers).content.decode('utf-8')
        content_queue.put(response)

4.消费者

class Thread_customer(threading.Thread):
    def __init__(self, name):
        # 参数一般以简短为主,所以选page
        threading.Thread.__init__(self)
        # 拿到任务队列
        self.name = name

    def run(self):
        # 开始时间
        time_start = time.time()
        print(self.name, "开始时间:", time_start)
        while True:
            if content_queue.empty() and flag:
                break
            else:
                try:
                    # print('当前的线程:', self.name, "将要从队列中取任务")
                    response = content_queue.get(block=False)
                    print(self.name, "将要从队列中取任务是:", page)
                    self.get_data(response)
                    print(self.name, '完成的任务是', page)
                except:
                    pass

        time_end = time.time()
        print(self.name, '完成时间是:', time_end)
        print(self.name, '耗时是:', time_end - time_start)

    def get_data(self, response):
        # 将json字符串转换成标准的python的数据格式
        content_list = json.loads(response)['Data']['Posts']
        # 爬取岗位数据
        for content in content_list:
            # 岗位名称
            name = content['RecruitPostName']
            # 工作国家
            country = content['CountryName']
            # 工作地区
            address = content['LocationName']
            # 职责
            duty = content['Responsibility']
            # 详情链接
            detail_link = content['PostURL']
            info={
                '岗位名称':name,
                '工作国家':country,
                '工作地区':address,
                '职责':duty,
                '详情链接':detail_link,
            }
            # 保存
            with open('tecent_job.txt', 'a', encoding='utf-8') as fp:
                fp.write(str(info))

5.主函数

flag = False
content_queue = Queue()
if __name__ == '__main__':
    # 任务开始时间
    t_start = time.time()
    print("主线程开始时间:", t_start)
    # 1.创建任务队列:存放所有的page
    page_queue = Queue()
    for page in range(1, 61):
        page_queue.put(page)

    # 2.生成生产者线程:
    producer_name = ['p1', 'p2', 'p3']
    producer_thread = []
    for name in producer_name:
        crawl = Thread_producer(name, page_queue)
        crawl.start()
        producer_thread.append(crawl)
        # join()不能写在这里,因为这样写就类似于单线程 c1完了才启动c2
    # 3.生成消费者线程:
    customer_name = ['c1', 'c2', 'c3']
    customer_thread = []
    for name in customer_name:
        crawl = Thread_customer(name)
        crawl.start()
        customer_thread.append(crawl)

    # 阻塞线程  让子线程都完成任务后,主线程再往下进行
    for thread in producer_thread:
        thread.join()

    flag = True

    for thread in customer_thread:
        thread.join()

    # 主进程结束时间
    t_end = time.time()
    print(t_end)
    print('完成时间是:', t_end - t_start)

# 三个线程跑三次run  三个线程爬60页数据

 

SAP ABAP OData 的四种开发方式 摘要:SAP开发中CDS视图转OData服务的四种方案演进:1)7.40+版本需手动映射数据源;2)7.50+可直接引用CDS视图自动生成服务;3)7.50+通过@OData.publish注解声明式发布;4)7.54+采用服务定义与绑定实现协议解耦。新版本推荐使用最新方案,旧系统可选传统方式,整体呈现开发简化、架构解耦的技术演进趋势。(150字) 阅读详情

相关推荐

抖音自定义卡片链接(图文链接)

抖音自定义可以自定义标题,打开链接,和展示图片 效果 主要代码 public void sendMessage(String conversationId, Object aBaseContent) throws Exception { // C233282u5.LIZIZ.LIZ().LIZIZ(LIZ).LIZ(obtain).LIZ(hLn).LIZ((AbstractC59811HHc) new H9Q()); Object HOa = ReflectionUtil

傅恒的博客 4140

多线程爬虫(生产者消费者模式)

常规爬虫 # -*- coding:utf-8 -*- import requests from lxml import etree from urllib import request import os import re def parse_page(url): headers = { "user-agent": "Mozilla/5.0 (Windows NT ...

weixin_43512511的博客 1309

统信UOS下获取root权限的两种姿势:图形化开启开发者模式 vs 命令行直接提权

本文详细解析了统信UOS下获取root权限的两种方法:通过图形界面永久开启开发者模式和使用命令行临时提权。开发者模式适合系统级开发,提供完整root权限但降低安全性;临时提权则更灵活,适合日常管理任务。文章还对比了两种方案的优缺点,帮助用户根据需求选择最佳权限管理策略。

weixin_30266885的博客 515

python 多线程工作,生产者-消费者模式

importtime,random importqueue,threading q=queue.Queue() defproducer(name): count=0 whilecount <20: time.sleep(random.randrange(3)) q.put(count)# 在队列里放包子 print('P...

godloveme的专栏 345

su03t语音模块烧录识别不出问题解决方法

su03t语音sdk烧录无法识别问题

weixin_49387645的博客 6389

华为云Stack扩容实战:从CMDB配置到计算节点增减容,一份避坑指南

本文详细解析华为云Stack扩容实战,从CMDB配置到计算节点增减容的全流程操作指南。通过典型场景案例和避坑建议,帮助企业高效管理计算资源扩容与减容,确保业务连续性。特别针对华为云Stack的弹性扩容能力提供专业指导,涵盖存储、网络及自动化工具链的配合使用。

weixin_30591551的博客 479

python-scrapy爬取腾讯社招网

学习完python爬虫之后,脑袋发热想实践一下,看看下各位大佬的博客,然后自己也开始做了些测试,以下将介绍scrapy框架爬去腾讯社招网的数据并保存至mongoDB。 首先在搭建好scrapy框架后,首先进入在需要创建项目的路径进入cmd 输入命令:scrapy startproject 项目名,本次demo名字为tecent 接下来开始代码的编写,创建爬虫类: import scr...

weixin_34308389的博客 238

微信聊天记录解密,必须是root的手机

手机上安装x-plore软件,将/data/data目录的相关EnMicroMsg.db auth_info_key_prefs.xml拷贝到/storge/emulated/0目录后才可以拷贝到电脑。路径:/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml。但是是加密过的 需要解密 解密密码生成规则是手机IMEI+微信UIN md5(32位小写)后的前7位。安卓手机要root测试版本微信要7或者8版本都可以。选择message表。

venus60的专栏 1007

python爬虫小项目--抓取腾讯招聘岗位信息

首先登陆以下网址进入腾讯招聘网https://hr.tencent.com/ 首先分析以下网页数据加载的方式,是json数据还是动态数据或者是静态? 看下network里面抓到的动态数据是否有哪些有用的东西 发现抓到的json数据里面没有传输任何数据 页面请求也没有返回任何有关岗位的信息 import requests from bs4 import BeautifulSoup ...

我不生产数据,只是数据的搬运工 4911

orangepi 5 plus ubuntu24.04上安装redroid

OrangePi 5 Plus运行reDroid云手机方案总结 在RK3588+Ubuntu 24.04上部署reDroid(Android容器化方案)的关键步骤: 内核要求:确保启用binderfs(无需ashmem,新版reDroid使用memfd替代); 安装流程: 安装Docker并配置代理加速镜像拉取; 拉取reDroid镜像(推荐Android 12/13 ARM64版本); 通过挂载binderfs启动容器,指定分辨率与DPI参数; 多实例管理: 脚本化创建多个容器(如8个实例),分配独立端口

babytiger的专栏 2292

RepHead一种重参数化检测头用于提升YOLOv8在困难样本上的检测性能

在目标检测任务中,困难样本通常是指那些由于特殊背景、遮挡、低分辨率或极度小物体等因素,导致模型难以识别的样本。这类样本对传统YOLO系列模型的影响较大,常常造成漏检或误检。重参数化(Reparameterization)是一种深度学习中常用的技术,旨在通过对网络参数的变换,使得模型在训练过程中能够更加灵活地适应不同的数据特征。通过对原始网络结构的参数进行重新表达,能够引导模型在训练过程中学习到更加有效的特征。本文详细介绍了YOLOv8的改进——RepHead检测头,并深入分析了它在解决困难样本检测中的应用。

博客 1209

关于如何爬取腾讯招聘信息

如何使用爬虫 import requests,json,time,random class TencentSpider(object): def __init__(self): self.headers = {'User-Agent':'Mozilla/5.0'} self.one_url = 'https://careers.tencent.com/tencentcaree...

weixin_44972500的博客 643

【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能

在探讨计算机性能优化的旅程中,我们常常被引导去关注算法的复杂度、代码的优化,或是更高效的数据结构。然而,有一个经常被忽视的角色在幕后默默地影响着程序的运行效率——那就是缓存(Cache)。正如哲学家亨利·戴维·梭罗在《瓦尔登湖》中所说:“细节是造成美丽的源泉”,在软件开发的世界里,对缓存的理解和优化,就是那些决定程序性能优雅与否的细节。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 3735

21天通关python视频下载-零基础:21天搞定Python分布爬虫,全套视频教程学习资料通过百度云网盘下载...

【课程内容】章节1-爬虫前奏001.爬虫前奏什么是网络爬虫002.爬虫前奏_HTTP协议介绍003.爬虫前奏抓包工具的使用网络请求章节2-网络请求1urlopen函数用法2_urlretrieve函数用法3参数编码和解码函数4urlparse和urlsplit函数用法5实战-用Request爬取拉勾网职位信息6作业-内涵段子爬虫作业7_ProxyHandler实现代理ip8_cookie原理和格式...

weixin_39605004的博客 874

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

零基础:21天搞定Python分布爬虫完整视频教程百度网盘免费获取

零基础:21天搞定Python分布爬虫完整视频教程百度网盘免费获取 课程目录 第1章:爬虫前奏 小节1【爬虫前奏】什么是网络爬虫23:05 小节2【爬虫前奏】HTTP协议介绍16:29 小节3【爬虫前奏】抓包工具的使用24:49 第2章:网络请求 小节4【urllib库】urlopen函数用法09:42 小节5【urllib库】urlretrieve函数用法04:35 小节6【urllib库】参...

dushiyou2017的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python 爬虫课程-零基础小白三周21天搞定Python分布爬虫课程全套

[↓↓↓资源简介↓↓↓]适用人群1、有Python基础,想学习爬虫的。2、想系统学习网络爬虫的。3、想学习分布式爬虫的。课程概述本课程完全从零基础出发,只要你有一点Python基础就可以听懂本课程!课程从基础到高级,让你21天破茧成蝶成为高级爬虫工程师!大致目录:章节1:爬虫前奏课时1【爬虫前奏】什么是网络爬虫课时2【爬虫前奏】HTTP协议介绍课时3【爬虫前奏】抓包工具的使用章节2:网络请求课时4...

weixin_39575054的博客 408

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

21天搞定python分布爬虫_零基础小白三周21天搞定Python分布爬虫课程全套下载

适用人群1、有Python基础,想学习爬虫的。2、想系统学习网络爬虫的。3、想学习分布式爬虫的。课程概述本课程完全从零基础出发,只要你有一点Python基础就可以听懂本课程!课程从基础到高级,让你21天破茧成蝶成为高级爬虫工程师!大致目录:章节1:爬虫前奏课时1【爬虫前奏】什么是网络爬虫课时2【爬虫前奏】HTTP协议介绍课时3【爬虫前奏】抓包工具的使用章节2:网络请求课时4【urllib库】url...

weixin_39545102的博客 350

python教学视频a_2019何老师一个月带你玩转Python分布式爬虫实战教程视频(视频+源码)...

├─章节1-爬虫前奏(官网免费)│001.爬虫前奏_什么是网络爬虫.mp4│002.爬虫前奏_HTTP协议介绍.mp4│003.爬虫前奏_抓包工具的使用网络请求.mp4│├─章节2-网络请求│1_urlopen函数用法.mp4│2_urlretrieve函数用法.mp4│3_参数编码和解码函数.mp4│4urlparse和urlsplit函数用法.mp4│5实战-用Request爬取拉勾网职位信息...

weixin_39973271的博客 262

python123文件字符分布_零基础小白三周21天搞定Python分布爬虫课程全套

零基础小白三周21天搞定Python分布爬虫课程全套——更多资源,课程更新在 多智时代 duozhishidai.com多智时代资源,简介:零基础小白三周21天搞定Python分布爬虫课程全套适用人群1、有Python基础,想学习爬虫的。2、想系统学习网络爬虫的。3、想学习分布式爬虫的。课程概述本课程完全从零基础出发,只要你有一点Python基础就可以听懂本课程!课程从基础到高级,让你21天破茧成...

weixin_42118056的博客 343

使用scrapy框架爬取腾讯招聘信息

我之前已经写过爬取腾讯招聘的博客,我是用多线程,生产者与消费者模式结合的方式写的,有兴趣的欢迎看一看 以下是博客链接:https://blog.youkuaiyun.com/g_optimistic/article/details/90048696 下面写的是用scrapy框架爬腾讯招聘 目录 1.创建爬虫文件 2.找接口 url 3.访问url 4.解析数据并保存 5.运行项目 6.s_...

也许会有_hui的博客 1031

多线程六之经典生产者消费者模式

典礼代码如下: 苹果实体类 package thread.producerandconsumer; /** * @FileName: Apple * @Description: * @AuthOr: lsp * @Date: 2019/11/30 18:17 */ public class Apple { private int id; public int getI...

qq_44261638的博客 199

scrapy爬取招聘网站数据总结

遇到的问题: 测试阶段 (提取规则):scrapy shell 网址 一直 REDIRECT &lt;302&gt; 被重定向 需要提供 cookies 由于在terminal一直设置错误,也就没折腾。后来在pycharm设置了cookies 如下: custom_settings = { "COOKIES_ENABLED": False, "DOWNLOAD_DELAY": 1, '...

liuhehe123的博客 2938

python爬取腾讯招聘的职位

1.新建项目使用命令 scrapy startproject  tencentcrawl 2.进入tencentcrawl\spiders scrapy genspider -t crawl  tencent  hr.tencent.com -t是模板的意思 3.编写items.py文件 # -*- coding: utf-8 -*- # Define here the model...

为梦想而奋斗,无悔_一叶扁舟的点滴成长! 1173

多线程,生产者消费者模式经典讲解,简单易懂2

本模式以一个经典练习为案例: 使用2种锁机制实现生产者和消费者模式 要求 练习(生产者消费者模式): 自定义同步容器,容器容量上限为10。可以在多线程中应用,并保证数据线程安全。 使用synchronized同步及wait()和notifyAll() 实现生产者消费者模式 逻辑图描述:   /** * 生产者消费者 * wait&amp;notify * wait/no...

nameIsHG的博客 437

scrapy框架开发爬虫实战——爬取2019年的腾讯招聘信息(组件操作,MongoDB存储,json存储,托管到GitHub)

腾讯招聘网主页 https://careers.tencent.com/search.html 腾讯招聘的api https://careers.tencent.com/tencentcareer/api/post/Query?keyword=python&pageIndex=1&pageSize=10 创建爬虫工程 #scrapy startproject 爬...

万锦 826

python多线程爬虫实现(多线程爬腾讯招聘)

介绍单线程多线程,实例演示python多线程爬虫腾讯招聘。

酱汁儿 825
上一篇: 简单创建一个scrapy项目,并创建爬百度的spider文件
下一篇: 使用scrapy框架爬取腾讯招聘信息
一个回和
博客等级 码龄8年 150粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值