Scrapy框架实例(爬取刺猬实习职位信息)

2023-10-24 09:10

本文主要是介绍Scrapy框架实例(爬取刺猬实习职位信息),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击查看刺猬实习网站

这次用的是scrapy框架爬取,爬的内容是左边分类里面的每一个分类第一页的求职信息

求职信息如图:

 

这次爬的有职位,薪水,学历,天数,地理位置

思路:

首先在自己创建的小蜘蛛里设置一个函数,处理开始的页面抓到所有的分类链接,然后用callback回调处理页面函数,再将提取信息传入pipelines保存。

代码呈上:

首先是items部分:

# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass JobItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()#职位salary = scrapy.Field()#薪水education_background = scrapy.Field()#学历day = scrapy.Field()#天数location = scrapy.Field()#位置

settings:(只需要修改一些信息即可)

BOT_NAME = 'job'SPIDER_MODULES = ['job.spiders']
NEWSPIDER_MODULE = 'job.spiders'ROBOTSTXT_OBEY = FalseDEFAULT_REQUEST_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36','Referer': 'https://blog.csdn.net/qq_43391383/article/details/87033451','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}
LOG_LEVEL = 'WARNING'ITEM_PIPELINES = {'job.pipelines.JobPipeline': 300,
}

 下面是最重要的小蜘蛛:(这里起名为ciwei)

# -*- coding: utf-8 -*-
import scrapy
from job.items import JobItem
import timeclass CiweiSpider(scrapy.Spider):name = 'ciwei'allowed_domains = ['ciweishixi.com']#域名start_urls = ['https://www.ciweishixi.com/']#初始url#抓取初始页面的各种分类的url然后访问将响应传给get_HTML函数def parse(self, response):infos = response.xpath('/html/body/div[2]/div[1]/div/div')for info in infos:urls = info.xpath('div[2]/a/@href').extract()for url in urls:requests = scrapy.Request(url, method="get", callback=self.get_Html)yield requests#接收响应抽取我们要的信息def get_Html(self, response):infos = response.xpath('/html/body/div[2]/section[2]/div/section/article')for info in infos:item = JobItem()#实习职位item['title'] = info.xpath('div[2]/div[1]/a/text()').extract_first()main = info.xpath('div[2]/div[2]/span/text()').extract()#薪水item['salary'] = main[0]#学历item['education_background'] = main[1]#天数item['day'] = main[-1]#位置item['location'] = info.xpath('div[2]/div[1]/div/i[2]/text()').extract_first()yield itemtime.sleep(1)#设置休眠时间

pipelines:

# -*- 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 csv
import codecsclass JobPipeline(object):#以TXT文本保存# def __init__(self):#     self.fp = open("F://ciwei.txt","a+",encoding="utf-8")## def process_item(self, item, spider):#     self.fp.write(#         str((item['title'].strip(),item['salary'],item['education_background'],item['day'],item['location'])) + '\n'#     )##     return item## def close(self):#     self.fp.close()#Excel保存def __init__(self):with open("F://qiuzhi.csv", "ab+") as self.fp:self.fp.write(codecs.BOM_UTF8)  # 为了防止在windows下直接打开csv文件出现乱码self.fp = open("F://qiuzhi.csv",'a+',newline='',encoding='utf-8')self.write = csv.writer(self.fp)self.write.writerow(['职位', '薪水', '学历', '天数', '地区'])def process_item(self, item, spider):self.write.writerow([item['title'].strip(),item['salary'],item['education_background'],item['day'],item['location']])def close(self):self.fp.close()

 

最后在cmd中cd到文件所在目录执行scrapy crawl ciwei 

可以看到我们要的信息已经保存在F盘中的文件内

 

这篇关于Scrapy框架实例(爬取刺猬实习职位信息)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java实例化对象的​7种方式详解

《Java实例化对象的​7种方式详解》在Java中,实例化对象的方式有多种,具体取决于场景需求和设计模式,本文整理了7种常用的方法,文中的示例代码讲解详细,有需要的可以了解下... 目录1. ​new 关键字(直接构造)​2. ​反射(Reflection)​​3. ​克隆(Clone)​​4. ​反序列化

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu