博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用scrapy爬取腾讯社招,获取所有分页的职位名称及chaolia、类型、人数、工作地点、发布日期超链接...
阅读量:5260 次
发布时间:2019-06-14

本文共 3125 字,大约阅读时间需要 10 分钟。

目的:把的每个分页的职位名称及链接、类型、人数、工作地点、发布日期爬取下来,然后存储到json文件里面

思路:

  1. 新建爬虫项目
  2. 在items.py文件里面设置存储的字段名称及类型
  3. 在spiders文件夹里面设置爬虫文件
  4. 设置管道文件
  5. 设置settings.py文件
  6. 测试运行

实际操作流程如下:

  1. 新建爬虫项目tencent

    1361873-20180711190924370-1773181309.png

  2. 在items.py文件里面设置存储的字段名称及类型

    1361873-20180711190930123-1847928025.png

  3. 在spiders文件夹里面设置爬虫文件 tencent_job.py

    1361873-20180711192358243-1959147578.png

  4. 设置管道文件pipelines.py

    1361873-20180711190943895-287040710.png

  5. 设置settings.py文件

    1361873-20180711190949696-2058626630.png

  6. 测试运行

    1361873-20180711190957189-591499294.png

  7. 爬取的数据结果tencent.json内容,共373页,3733条数据。

    1361873-20180711191005141-228211290.png
    1361873-20180711191011799-186304557.png

备注:博客园的图片,不支持像csdn那样可以放大缩小,所以爬虫文件和管道文件的代码如下。

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 scrapy# 要存储的字段名称及类型class TencentItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()    # pass    # 职位名称    job_Title = scrapy.Field()    # 详细链接    job_Link = scrapy.Field()    # 职位类型    job_Type = scrapy.Field()    # 职位人数    job_Number = scrapy.Field()    # 工作位置    job_Location = scrapy.Field()    # 发布日期    job_PublicDate = scrapy.Field()

爬虫文件tencent_job.py代码:

# -*- coding: utf-8 -*-import scrapyfrom tencent.items import TencentItemclass TencentJobSpider(scrapy.Spider):    # 爬虫名字    name = 'tencent'    # 爬取的域范围    allowed_domains = ['tencent.com']    url = 'https://hr.tencent.com/position.php?&start='    offset = 0    # 爬取的url列表    start_urls = [url + str( offset)]    # start_urls = ['https://hr.tencent.com/position.php?&start=0']    # 解析生成器,由于含有yield关键字,所以不是普通函数,而是生成器。根据返回的类型,如果是返回的数据,则把爬取的请求队列里面所有请求都执行完,才交给管道文件存储;如果是请求,则发送请求,放入请求队列,再下载调用parse    def parse(self, response):                # 使用xpath获取类名为odd和even的tr标签        job_list = response.xpath('//tr[@class="odd"] | //tr[@class="even"]')        # print(job_list)                for each in job_list:            # 实例化一个模型对象            item = TencentItem()            # 把匹配到的内容分别存储到模型对象的字段            # 注意:xpath匹配后的结果为列表,在进行xpath语法匹配时,下标是从1开始计数,python列表下标从0开始,extract是把xpath匹配的对象转换为unicode字符串            item['job_Title'] = each.xpath('./td[1]/a/text()')[0].extract()            item['job_Link'] = each.xpath('./td[1]/a/@href')[0].extract()            item['job_Type'] = each.xpath('./td[2]/text()').extract()            item['job_Number'] = each.xpath('./td[3]/text()')[0].extract()            item['job_Location'] = each.xpath('./td[4]/text()')[0].extract()            item['job_PublicDate'] = each.xpath('./td[5]/text()')[0].extract()            # print(item)            # 把数据返回给piplines.py管道文件            yield item        if self.offset <= 3730:            self.offset += 10        # 发送请求,把请求返回给调度器,如果请求有响应,则调用回调函数parse来解析处理        yield scrapy.Request(self.url + str(self.offset), callback = self.parse)

管道文件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.htmlimport jsonclass TencentPipeline(object):    # 该方法名字固定不可修改,参数名字可修改。该方法必须有    def process_item(self, item, spider):        self.filename = open('tencent.json','a')        jsontext = json.dumps(dict(item),ensure_ascii = False).encode('utf-8') + '\n'        self.filename.write(jsontext)        self.filename.close()        return item

转载于:https://www.cnblogs.com/silence-cc/p/9296232.html

你可能感兴趣的文章
格而知之2:UIView的autoresizingMask属性探究
查看>>
我的Hook学习笔记
查看>>
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>