1.  先打开settings.py文件将 'ITEM_PIPELINES'启动(取消注释即可)

  

2.  spider代码

# -*- coding: utf-8 -*-
import scrapy
import json class TzcSpider(scrapy.Spider):
# spider的名字,唯一
name = 'tzc'
# 起始地址
start_urls = ['https://hr.tencent.com/position.php?keywords=python&tid=0&lid=2268'] # 每个url爬取之后会调用这个方法
def parse(self, response):
tr = response.xpath( '//table[@class="tablelist"]/tr[@class = "even"]|//table[@class="tablelist"]/tr[@class = "odd"]')
if tr:
for i in tr:
data = {
"jobName": i.xpath('./td[1]/a/text()').extract_first(),
"jobType":i.xpath('./td[2]/text()').extract_first(),
"Num":i.xpath('./td[3]/text()').extract_first(),
"Place":i.xpath('./td[4]/text()').extract_first(),
"Time":i.xpath('./td[5]/text()').extract_first()
}
# 将数据变成json数据便于存储
# data = json.dumps(data,ensure_ascii=False)
yield data
# 寻找下一页标签
url_next = response.xpath('//a[@id = "next"]/@href').extract_first()
# 提取的是段标签,需要加上域名
url_next = 'https://hr.tencent.com/{}'.format(url_next)
# 返回下一页地址,scrapy会递归
yield scrapy.Request(url_next)

3.  pipelines.py代码

import json

class TanzhouPipeline(object):
def process_item(self, item, spider):
# 数据json化
item = json.dumps(item,ensure_ascii=False)
self.f.write(item)
self.f.write('\n')
return item
# 爬虫开启时运行
def open_spider(self,spider):
# 打开文件
self.f = open('info3.json','w')
# 爬虫关闭时运行
def close_spider(self,spider):
# 关闭文件
self.f.close()

4.  补充2,防止item不规范,可以使用items.py文件对其限制(还要改spider中的item代码)(还要修改pipelines中的代码,要先dict(item)转化成字典,再json转化)

  pipeline.py中先转化成字典dict()再json转化:

item = json.dumps(dict(item),ensure_ascii=False)

  items.py代码:

import scrapy

class TanzhouItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
jobName = scrapy.Field()
jobType = scrapy.Field()
Num = scrapy.Field()
Place = scrapy.Field()
Time =scrapy.Field()

  spider代码:

  

import scrapy
import json
from ..items import TanzhouItem class TzcSpider(scrapy.Spider):
# spider的名字,唯一
name = 'tzc'
# 起始地址
start_urls = ['https://hr.tencent.com/position.php?keywords=python&tid=0&lid=2268'] # 每个url爬取之后会调用这个方法
def parse(self, response):
tr = response.xpath( '//table[@class="tablelist"]/tr[@class = "even"]|//table[@class="tablelist"]/tr[@class = "odd"]')
if tr:
for i in tr:
# 自定义字典的方式,下面是第二种方式
data = {
"jobName": i.xpath('./td[1]/a/text()').extract_first(),
"jobType":i.xpath('./td[2]/text()').extract_first(),
"Num":i.xpath('./td[3]/text()').extract_first(),
"Place":i.xpath('./td[4]/text()').extract_first(),
"Time":i.xpath('./td[5]/text()').extract_first()
}
# 第二种方式,用items.py约束
# data = TanzhouItem()
# data["jobName"] = i.xpath('./td[1]/a/text()').extract_first()
# data["jobType"] = i.xpath('./td[2]/text()').extract_first()
# data["Num"] = i.xpath('./td[3]/text()').extract_first()
# data["Place"] = i.xpath('./td[4]/text()').extract_first()
# data["Time"] = i.xpath('./td[5]/text()').extract_first()
# 将数据变成json数据便于存储
# data = json.dumps(data,ensure_ascii=False)
yield data
# 寻找下一页标签
url_next = response.xpath('//a[@id = "next"]/@href').extract_first()
# 提取的是段标签,需要加上域名
url_next = 'https://hr.tencent.com/{}'.format(url_next)
# 返回下一页地址,scrapy会递归
yield scrapy.Request(url_next)

  

爬虫之 案列1补充(pipelines优化)的更多相关文章

  1. 2021年-在windwos下如何用TOMACT发布一个系统(完整配置案列)

    2021年新年第一篇:博主@李宗盛-关于在Windwos下使用TOMCAT发布一个系统的完成配置案列. 之前写过关于TOMCAT的小篇幅文档,比较分散,可以作为对照与参考. 此篇整合在一起,一篇文档写 ...

  2. Spring MVC的配置文件(XML)的几个经典案列

    1.既然是配置文件版的,那配置文件自然是必不可少,且应该会很复杂,那我们就以一个一个的来慢慢分析这些个经典案列吧! 01.实现Controller /* * 控制器 */ public class M ...

  3. js闭包的作用域以及闭包案列的介绍:

    转载▼ 标签: it   js闭包的作用域以及闭包案列的介绍:   首先我们根据前面的介绍来分析js闭包有什么作用,他会给我们编程带来什么好处? 闭包是为了更方便我们在处理js函数的时候会遇到以下的几 ...

  4. SAMSUNG某型号一千短信成功记录!对比其他软件恢复不成功的案列!

    Hello! 大家好欢迎再次来到Dr.wonde的博客, 下面谈一下今天的案列,今年11月26号收到了一客户寄来的三星S4手机恢复里面短信, 如下图所示,用其他软件恢复以后,数据为零,没有恢复,,这下 ...

  5. php知识案列分享

    今天再跟大家分享一下,以下案列. 使用array_flip函数生成随机数,可以去掉重复值. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 < ...

  6. linux下mysql函数的详细案列

    MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *pas ...

  7. axis1,xfire,jUnit 测试案列+开Web Service开发指南+axis1.jar下载 代码

    axis1,xfire,jUnit 测试案列+Web Service开发指南(中).pdf+axis1.jar下载    代码 项目和资源文档+jar 下载:http://download.csdn. ...

  8. 大数据技术之_14_Oozie学习_Oozie 的简介+Oozie 的功能模块介绍+Oozie 的部署+Oozie 的使用案列

    第1章 Oozie 的简介第2章 Oozie 的功能模块介绍2.1 模块2.2 常用节点第3章 Oozie 的部署3.1 部署 Hadoop(CDH版本的)3.1.1 解压缩 CDH 版本的 hado ...

  9. react 的安装和案列Todolist

    react 的安装和案列Todolist 1.react的安装和环境的配置 首先检查有没有安装node.js和npm node -v npm -v 查看相关版本 2.安装脚手架工具 2.构建:crea ...

随机推荐

  1. python-面向对象(绑定方法与非绑定方法)

    一.绑定方法: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的,自动将对象当作第一个参数传入,类也可以调用,但是不会自动传值 2 ...

  2. Android 设备的CPU类型(通常称为”ABIs”)

    armeabiv-v7a: 第7代及以上的 ARM 处理器.2011年15月以后的生产的大部分Android设备都使用它. arm64-v8a: 第8代.64位ARM处理器,很少设备,三星 Galax ...

  3. re_test

    https://www.cnblogs.com/zhaof/p/6925674.html#4152933 https://www.cnblogs.com/lanyinhao/p/9165747.htm ...

  4. SpringMVC简介

    一.SpringMVC 是什么? 后续编辑,先上Demo>> SpringMVCDemo

  5. Java 的 Api 文档生成工具 JApiDocs 程序文档工具

    JApiDocs 详细介绍 简介 JApiDocs 是一个符合 Java 编程习惯的 Api 文档生成工具.最大程度地利用 Java 的语法特性,你只管用心设计好接口,添加必要的注释,JApiDocs ...

  6. 字符串为空的比较 ==与equals() 区别(キ`゚Д゚´)!!基础很重要 !!!

    情况描述:我提交的代码,让老大审批了一次,讲真的,对于我来说受益匪浅,其中有一个印象很深的内容:一个字符串是否为空的判断,我以前敲代码一直都是这样写的,可是从来都没有意识到这个东西. 代码: if(s ...

  7. Distance

    1191: Distance 时间限制: 1 Sec  内存限制: 32 MB 题目描述 There is a battle field. It is a square with the side l ...

  8. (转)一位资深程序员大牛给予Java初学者的学习路线建议

    Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每 ...

  9. Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]

    解决方法: <select id="selectIf" resultType="student"> SELECT id,name,age,score ...

  10. Paddington2