Python的scrapy之爬取boss直聘网站

2023-10-30 16:50
文章标签 python 网站 scrapy boss 直聘

本文主要是介绍Python的scrapy之爬取boss直聘网站,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在我们的项目中,单单分析一个51job网站的工作职位可能爬取结果不太理想,所以我又爬取了boss直聘网的工作,不过boss直聘的网站一次只能展示300个职位,所以我们一次也只能爬取300个职位。

jobbossspider.py:

# -*- coding: utf-8 -*-
import scrapy
from ..items import JobbossItemclass JobbosspiderSpider(scrapy.Spider):name = 'jobbosspider'#allowed_domains = ['https://www.zhipin.com/']allowed_domains = ['zhipin.com']# 定义入口URL#start_urls = ['https://www.zhipin.com/c101010100/?query=python&page=1&ka=page-1']    #北京#start_urls=['https://www.zhipin.com/c100010000/h_101010100/?query=Python&ka=sel-city-100010000']   #全国#start_urls=['https://www.zhipin.com/c101020100/h_101010100/?query=Python&ka=sel-city-101020100']   #上海#start_urls=['https://www.zhipin.com/c101280100/h_101010100/?query=Python&ka=sel-city-101280100']     #广州#start_urls=['https://www.zhipin.com/c101280600/h_101010100/?query=Python&ka=sel-city-101280600']    #深圳#start_urls=['https://www.zhipin.com/c101210100/h_101010100/?query=Python&ka=sel-city-101210100']     #杭州#start_urls=['https://www.zhipin.com/c101030100/h_101010100/?query=Python&ka=sel-city-101030100']      #天津#start_urls=['https://www.zhipin.com/c101110100/h_101010100/?query=Python&ka=sel-city-101110100']       #西安#start_urls=['https://www.zhipin.com/c101200100/h_101010100/?query=Python&ka=sel-city-101200100']        #武汉#start_urls=['https://www.zhipin.com/c101270100/h_101010100/?query=Python&ka=sel-city-101270100']         #成都start_urls=['https://www.zhipin.com/c100010000/h_101270100/?query=python%E7%88%AC%E8%99%AB&ka=sel-city-100010000']  #爬虫工程师,全国# 定义解析规则,这个方法必须叫做parsedef parse(self, response):item = JobbossItem()# 获取页面数据的条数node_list = response.xpath("//*[@id=\"main\"]/div/div[2]/ul/li")# 循环解析页面的数据for node in node_list:item["job_title"] = node.xpath(".//div[@class=\"job-title\"]/text()").extract()[0]item["compensation"] = node.xpath(".//span[@class=\"red\"]/text()").extract()[0]item["company"] = node.xpath("./div/div[2]/div/h3/a/text()").extract()[0]company_info = node.xpath("./div/div[2]/div/p/text()").extract()temp = node.xpath("./div/div[1]/p/text()").extract()item["address"] = temp[0]item["seniority"] = temp[1]item["education"] = temp[2]if len(company_info) < 3:item["company_type"] = company_info[0]item["company_finance"] = ""item["company_quorum"] = company_info[-1]else:item["company_type"] = company_info[0]item["company_finance"] = company_info[1]item["company_quorum"] = company_info[2]yield item# 定义下页标签的元素位置next_page = response.xpath("//div[@class=\"page\"]/a/@href").extract()[-1]# 判断什么时候下页没有任何数据if next_page != 'javascript:;':base_url = "https://www.zhipin.com"url = base_url + next_pageyield scrapy.Request(url=url, callback=self.parse)'''
# 斜杠(/)作为路径内部的分割符。
# 同一个节点有绝对路径和相对路径两种写法。
# 绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
# 相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。
# "."表示当前节点。
# ".."表示当前节点的父节点nodename(节点名称):表示选择该节点的所有子节点# "/":表示选择根节点# "//":表示选择任意位置的某个节点# "@": 表示选择某个属性
'''

items.py

import scrapyclass JobbossItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()job_title = scrapy.Field()  # 岗位compensation = scrapy.Field()  # 薪资company = scrapy.Field()  # 公司address = scrapy.Field()  # 地址seniority = scrapy.Field()  # 工作年薪education = scrapy.Field()  # 教育程度company_type = scrapy.Field()  # 公司类型company_finance = scrapy.Field()  # 融资company_quorum = scrapy.Field()  # 公司人数

pipelines输出管道:

class JobbossPipeline(object):def process_item(self, item, spider):print('职位名:',item["job_title"])print('薪资:',item["compensation"])print('公司名:',item["company"])print('公司地点:',item["address"])print('工作经验:',item["seniority"])print('学历要求:',item["education"])print('公司类型:',item["company_type"])print('融资:',item["company_finance"])print('公司人数:',item["company_quorum"])print('-'*50)return item

pipelinemysql输入到数据库中:

# -*- coding: utf-8 -*-
from week5_day04.dbutil import dbutil# 作业: 自定义的管道,将完整的爬取数据,保存到MySql数据库中
class JobspidersPipeline(object):def process_item(self, item, spider):dbu = dbutil.MYSQLdbUtil()dbu.getConnection()  # 开启事物# 1.添加try:sql = "insert into boss_job (job_title,compensation,company,address,seniority,education,company_type,company_finance,company_quorum)values(%s,%s,%s,%s,%s,%s,%s,%s,%s)"#date = []#dbu.execute(sql, date, True)dbu.execute(sql, (item["job_title"],item["compensation"],item["company"],item["address"],item["seniority"],item["education"],item["company_type"],item["company_finance"],item["company_quorum"]),True)dbu.commit()print('插入数据库成功!!')except:dbu.rollback()dbu.commit()  # 回滚后要提交finally:dbu.close()return item

在settings.py中开启如下设置

SPIDER_MIDDLEWARES = {'jobboss.middlewares.JobbossSpiderMiddleware': 543,
}DOWNLOADER_MIDDLEWARES = {'jobboss.middlewares.JobbossDownloaderMiddleware': 543,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None, # 这一行是取消框架自带的useragent'jobboss.rotateuseragent.RotateUserAgentMiddleware': 400
}ITEM_PIPELINES = {'jobboss.pipelines.JobbossPipeline': 300,'jobboss.pipelinesmysql.JobspidersPipeline': 301,
}LOG_LEVEL='INFO'
LOG_FILE='jobboss.log'#最后这两行是加入日志

最后启动项目,可以在pycharm自带的terminal中输入 :scrapy crawl 爬虫文件的名称

也可以创一个小的启动程序:

from scrapy.cmdline import executeexecute(['scrapy', 'crawl', 'jobbosspider'])

爬虫启动结果:

数据库中的数据如下:

 

以上就是爬取boss直聘的所有内容了

 

转载于:https://www.cnblogs.com/yuxuanlian/p/9877513.html

这篇关于Python的scrapy之爬取boss直聘网站的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309273

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核