当前位置: 首页 > 编程日记 > 正文

【Python】Scrapy爬虫实战(腾讯社会招聘职位检索)

爬虫网页:https://hr.tencent.com/position.php

应用Scrapy框架,具体步骤就不详细说明,前面几篇Scrapy有一定的介绍

因为要涉及到翻页,下面的代码使用拼接的方式获取url,应用在一些没办法提取下一页链接的情况下

直接写  if self.offset < 3610:  不太好,之后可能会发生变化,所以最好的方式就是获取下一页的url再发送请求。

yield 返回的就是需要管道处理的有用数据  或者  返回下一页的请求

#tencent.py
# -*- coding: utf-8 -*-
import scrapy
from Tencent.items import TencentItemclass TencentSpider(scrapy.Spider):name = 'tencent'allowed_domains = ['tencent.com']baseURL = "https://hr.tencent.com/position.php?&start="offset = 0start_urls = [baseURL + str(offset)]def parse(self, response):node_list = response.xpath("//tr[@class='even'] | //tr[@class='odd']")for node in node_list:item = TencentItem()item["positionName"] = node.xpath("./td[1]/a/text()").extract()[0]item["positionLink"] = "https://hr.tencent.com/"+ node.xpath("./td[1]/a/@href").extract()[0]if len(node.xpath("./td[2]/text()")):item["positionType"] = node.xpath("./td[2]/text()").extract()[0]else:item["positionType"] = ""item["peopleNumber"] = node.xpath("./td[3]/text()").extract()[0]item["workLocation"] = node.xpath("./td[4]/text()").extract()[0]item["publishTime"] = node.xpath("./td[5]/text()").extract()[0]yield itemif self.offset < 3610:self.offset += 10url = self.baseURL + str(self.offset)yield scrapy.Request(url,callback = self.parse)

这是通过获取下一页链接的方法,就不管该工作岗位变成多少都可以爬取,替换上面的if语句

if len(response.xpath("//a[@class='noactive' and @id='next']"))==0:url = response.xpath("//div[@class='pagenav']/a[@id='next']/@href").extract()[0]yield scrapy.Request("https://hr.tencent.com/"+url,callback = self.parse)

#items.py
# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass TencentItem(scrapy.Item):#职位名称positionName = scrapy.Field()#职位详情的链接positionLink = scrapy.Field()#职位类别positionType = scrapy.Field()#招聘人数peopleNumber = scrapy.Field()#工作地点workLocation = scrapy.Field()#发布时间publishTime = scrapy.Field()
#pipelines.py
# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import jsonclass TencentPipeline(object):def __init__(self):self.f = open("tencent.json","w",encoding = "utf-8")def process_item(self, item, spider):self.f.write(json.dumps(dict(item),ensure_ascii = False) + ",\n")return itemdef close_spider(self,spider):self.f.close()
#settings.py
# -*- coding: utf-8 -*-BOT_NAME = 'Tencent'SPIDER_MODULES = ['Tencent.spiders']
NEWSPIDER_MODULE = 'Tencent.spiders'# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'Tencent.pipelines.TencentPipeline': 300,
}

最后在cmd中输入

scrapy crawl tencent

会在当前目录下创建一个“tencent.json”,

爬取成功!

相关文章:

一对一直播app源码功能操详解方案分享

一&#xff1a;登录页面&#xff1a;1.快捷登录&#xff1a;可以利用第三方账号进行快捷登录2.手机登录&#xff1a;可以让用户通过输入手机号码和密码进行登录.3.注册&#xff1a;可以使用手机号获取验证码注册账号二&#xff1a;打开一对一直播APP首页打开APP&#xff0c;会显…

从一个需求看问题的无限复杂化和简单化

一个需求 如果你一开始的出发点就错了&#xff0c;那么后续的设计只会非常复杂&#xff0c;而且还会有漏洞&#xff0c;也很难发现&#xff0c;发现了也很难解决。 先看数据结构&#xff1a; A表 主键id 其他各种字段不重要 &#xff0c;重要的就一个字段sort字段 aid1 …

使用自定义材质球,实现NGUI屏幕溶解和灰显

UITexture实现的溶解&#xff1a; 重设UITeture的材质球实现上述效果&#xff0c;把当前屏幕渲染的Texture2D丢给UITexture&#xff0c;即可实现UI屏幕特效&#xff0c;背景模糊等都可以。 难点主要是实时刷新问题 解决的比较粗暴&#xff0c;每次Update重设材质球&#xff0c;…

【Python】Tkinter 体验

import tkinter as tk root tk.Tk() root.title("work hard") #添加一个Label组件&#xff0c;Label组件是GUI程序中最常用的组件之一 #Label组件可以显示文本&#xff0c;图标或图片 #在这里我们让它显示指定文本 theLabel tk.Label(root,text"努力努力再努力…

debian手动安装java两种方法

2019独角兽企业重金招聘Python工程师标准>>> 方法一&#xff1a;下载后修改~/.bashrc文件 方法二&#xff1a;使用update-alternatives进行命令安装 相关配置记录 法一&#xff1a; 官网下载压缩包&#xff0c;解压&#xff0c;然后复制到/usr/lib/jvm目录下&#x…

【Python】Label组件 Button组件 Checkbutton组件

Label组件 Label组件是用于在界面上输出描述的标签。 #导入tkinter模块所有内容 from tkinter import *#创建一个主窗口&#xff0c;可以容纳整个GUI程序 root Tk() root.title("hhh")textLabel Label(root,text"努力努力再努力&#xff01;\n努力努力再努力…

大厂线上案例复盘--代码漏洞

万无一失却实际上是形同虚设的代码逻辑漏洞 这是一则发生在某大厂的真实案例&#xff0c;出于脱敏名字这且不说。 这个系统因为第一次上线&#xff0c;流量非常的大。 所以需要灰度上线&#xff0c;所谓灰度方案很短&#xff0c;比如按照地理位置&#xff0c;先选择某个访问量…

使用Vue+Spring Boot实现Excel上传

写在最前 在上期教程中我们介绍了读写Excel与使用Selenium的入门方法&#xff0c;本期将介绍通过VueSpring Boot实现在WebApp中上传Excel导入测试脚本的功能。使用前后端分离的技术是因为这样便于后续功能的迭代&#xff0c;在本文中我们只涉及一个简单的前端界面及一个简单的后…

国信优易首席科学家周涛:大数据的商业应用

国信优易首席科学家周涛认为&#xff0c;大数据已经成为一个非常热的概念&#xff0c;但是当一个概念热到一定程度就会存在风险&#xff0c;甚至风险比机会还多。在大数据沙龙中&#xff0c;他和数据从业者们分享了自己所经历的大数据应用。 以下为周涛发言&#xff1a; 大数据…

【Python】Radiobutton组件 LabelFrame组件 Entry组件

Radiobutton组件 Radiobutton组件跟Checkbutton组件的用法基本一致&#xff0c;唯一不同的是Radiobutton实现的是“单选”的效果。 要实现这种互斥的效果&#xff0c;同组内的所有Radiobutton只能共享一个variable选项&#xff0c;并且需要设置不同的value选项值。 注释掉的也…

索引与联合索引使用注意

索引和联合索引看似很简单但是往往不一定用的对。 假设数据库2个字段a,b都是查询条件 第一个问题&#xff1a;是建立2个索引还是一个联合索引&#xff1f; 第二个问题&#xff1a;如果建立联合索引那么字段的顺序有什么讲究&#xff1f; 原则&#xff1a; 1.如果需要多个字…

用canvas实现一个vue弹幕组件

看B站时&#xff0c;对弹幕的实现产生了兴趣&#xff0c;一开始想到用css3动画去实现&#xff0c;后来感觉这样性能不是很好&#xff0c;查了下资料&#xff0c;发现可以用canvas实现&#xff0c;于是就摸索着写了一个简单的弹幕。弹幕功能支持动态添加弹幕弹幕不重叠自定义弹幕…

系统架构的过程 浮现式设计

系统架构如果设计之初就设计错了&#xff0c;那么必然是南辕北辙。 很多人做系统设计总是东一下&#xff0c;西一下&#xff0c;杂乱无章&#xff0c;想到那是那&#xff0c;然后系统的边界很大&#xff0c;总会有疏漏。 那么系统架构应该怎么设计呢&#xff1f; 首先来说分…

【Python】Listbox组件 Scrollbar组件 Scale组件

Listbox组件 在选项特别多的时候&#xff0c;Listbox是以列表的形式显示出来&#xff0c;并支持滚动条操作&#xff0c;所以在对于需要提供大量选项的情况下会更适用。 from tkinter import * root Tk() theLB Listbox(root,setgridTrue) theLB.pack() for item in ["…

Hive 按某列的部分排序 以及 删列操作

Hive 按某列的部分排序 以及 删列操作 脑袋果然还是智商不足。 涉及到的小需求&#xff1a; 某个表test 有一列 tc&#xff1a; a字符串b字符串c字符串 拼接组成把test表&#xff0c;按b字符串排序 输出遇到的问题&#xff1a; select 里面必须包含 order by 的列按b字符串排序…

docker 安装 RabbitMQ

1、镜像中国&#xff08;http://www.docker-cn.com/registry-mirror&#xff09;&#xff1a;直接使用https://hub.docker.com下载镜像比较慢&#xff0c;使用镜像中国加速 使用例子&#xff1a;$ docker pull registry.docker-cn.com/library/rabbitmq:3.6-management 2、拉取…

编程容易犯的错

1.数字 比如分页默认从第0页开始&#xff0c;你不了解&#xff0c;写个1&#xff0c;这样数据也出来&#xff0c;但是就是少了第一条&#xff0c;这种错误比较难发现。 写代码对于数字需要敏感&#xff0c;不懂一定要搞懂。 2.参数 多参数做缓存拼凑一个key&#xff0c;之前…

深圳杯---无线回传拓扑规划

B题-无线回传拓扑规划&#xff08;3人完成&#xff09; 背景介绍 在城区建设基站&#xff0c;传输光纤部署最后一公里的成本高&#xff0c;光纤到站率低&#xff0c;全球综合来看低于60%&#xff1b;如果使用微波传输&#xff0c;由于微波只能在LOS&#xff08;视距&#xff0…

Jmeter脚本 GUI和非GUI启动方式

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0e;下载Jmeter 地址&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 2&#xff0e;启动jmeter 运行bin/jmeter.bat 3&#xff0e;添加线程组 在TestPlan节点上右键&#xff0c;Add-->Threads(U…

前端效果参考地址

今天项目内容基本完善&#xff0c;没什么事情&#xff0c;就找了一些插件和好用的css动画&#xff0c;下面将一些链接地址分享出来 1、如果需要写阴影、圆角、渐变、弹性盒子等&#xff0c;请参考一下方式&#xff1a; 点击 2、轮播图、全屏滚动等动画&#xff1a; swiper效果 …

随机变量的数字特征(数学期望,方差,协方差与相关系数)

戳这里&#xff1a;概率论思维导图 &#xff01;&#xff01;&#xff01; 数学期望 离散型随机变量的数学期望 &#xff08;这里要求级数绝对收敛&#xff0c;若不绝对收敛&#xff0c;则E(X)不存在&#xff09; 如果有绝对收敛&#xff0c;则有 &#xff0c;其中 连续型…

Spring @bean冲突解决方案

引用2个jar都实现了相同的bean注入&#xff0c;这个是feign的Level Bean public Level feignLoggerLevel() {return Level.FULL; } 这样报错: escription:xxx required a single bean, but 2 were found:- feignLoggerLevel: defined by method feignLoggerLevel in class p…

javascript中实例方法与类方法的区别

在javascript中&#xff0c;类有静态属性和实例属性之分&#xff0c;也有静态方法和实例方法之分 类属性&#xff08;静态属性&#xff09;&#xff1a;通过类直接访问&#xff0c;不需要声明类的实例来访问 类方法&#xff08;静态方法&#xff09;&#xff1a;通过类直接访问…

vue 集成富文本tinymce

开发环境 1. vscode开发语言 1. vue 2. javaScript插件安装 1. npm install tinymce -S 2. 可以使用里面的文件&#xff0c; 下载后可以在node_modules 里面查看如下未目录结构3. 可以将整个结构拷在static里面&#xff0c;为了节省打包后的文件大小可以将tinymce.min.js以cdn方…

c语言中如何设计和编写一个应用系统?

C程序中,如何设计和编写一个应用系统?一、 C语言文件的操作1、 文件操作的基本方法&#xff1a;C语言将计算机的输入输出设备都看作是文件。例如&#xff0c;键盘文件、屏幕文件等.向屏幕输出一个信息&#xff0c;例如“Hello”是#include.h>int main(){printf("Hello…

深圳杯---人才吸引力评价模型研究

人才吸引力评价模型研究 在世界各国和全国各地都加大争夺人才的背景下&#xff0c;一个城市要保持其竞争活力和创新力&#xff0c;必须与时俱进地但不盲目地调整相关人才吸引政策。2018年深圳市将加大营商环境改革力度作为一项重要工作&#xff0c;以吸引更多优秀的高新企业和…

不写容易出错的代码

下面2段代码都是完成商品名称的更新&#xff0c;只是第一种情况数据源是list第二种是map 第一代代码是从List里获取第0个 entity.setProduct_name(productList.get(0).getName()); 第二段代码从map里获取键值 entity.setProduct_name(productMap.get(pid).getName())); 如果…

【Vue】IView之table组件化学习(二)

最基本的绑定table是这样的&#xff0c;需要columns和data两个属性。 <template><Card><h4>表格栗子</h4><Table :columns"cols" :data"stuList"></Table></Card> </template><script> export defa…

show-busy-java-threads查找CPU占用高

背景&#xff1a;需要查找线上CPU占用过高的Java线程在做什么。 可以使用top命令找出占CPU高的进程 #top 然后按shiftC 按CPU占比排序 然后把进程中占比高的线程id找出来&#xff0c;这个是常见的套路&#xff0c;但是这样做比较繁琐。 可以使用show-busy-java-threads工具…

了解机器学习的八大专业术语

转自&#xff1a;https://www.sohu.com/a/217453268_178466 1 自然语言处理 自然语言处理对于许多机器学习方法来说是一个常用的概念&#xff0c;它使得计算机理解并使用人所读或所写的语言来执行操作成为了可能。 自然语言处理最重要的最有用的实例&#xff1a; ① 文本分类…