python3使用scrapy生成csv文件代码示例


Posted in Python onDecember 28, 2017

去腾讯招聘网的信息,这个小项目有人做过,本着一个新手学习的目的,所以自己也来做着玩玩,大家可以参考一下。

这里使用的是调用cmdline命令来生成csv文件,而不是importcsv模块。

from scrapy import cmdline 
cmdline.execute("scrapy crawl field -o info.csv -t csv".split())

这段代码我保存在一个自建的.py文件中,然后在主文件中调用这个模块,这样就不用每次在cmd中敲命令了,大家可以使用这种方法我觉得很方便的。

进入正题(获取腾讯招聘网的信息http://hr.tencent.com/position.php):

python3使用scrapy生成csv文件代码示例

保存的csv文件内容:

python3使用scrapy生成csv文件代码示例

我们需要获取的数据首先应该使用scrapy的items容器记录下来:

import scrapy 
 
class GetItem(scrapy.Item): 
  name = scrapy.Field()    #招聘单位 
  genre = scrapy.Field()   #招聘类型 
  number = scrapy.Field()   #招聘人数 
  place = scrapy.Field()   #招聘地点 
  time = scrapy.Field()    #招聘时间

以上为我们等一下需要获取的信息

然后我们新建spider文件来编写爬去网站的代码:

# _*_ coding:utf-8 _*_ 
import scrapy 
from scrapy.http import Request 
from time import sleep 
import os 
import sys 
sys.path.append("D:\PYscrapy\get_Field") #我使用这种路径添加的方式来调用GetItem函数和main函数 
from get_Field.items import GetItem 
import main  #main函数开头就说了两行调用程序的代码,你也可以在cmd中使用scrapy crawl field -o info.csv -t csv来调用。主要是方便 
 
class Tencentzhaopin(scrapy.Spider): 
  name = "field"  #这个程序要执行的唯一标识名 可以自己设置 
  start_urls = ["http://hr.tencent.com/position.php?&start=0#a"] #首页网址 
  url = "http://hr.tencent.com/" #由于有翻页操作所以我们设置翻页前缀,等一下获取后缀 
  count = 0 
  names = []    #这五个列表记录我们获取的信息 
  genres = [] 
  numbers = [] 
  places = [] 
  times = [] 
  filename = "data.txt"  #保存的文件名 
  if os.path.exists(filename) == True:  #判断这个文件是否已经存在文件夹中,有就移除掉。 
    os.remove(filename) 
 
  def parse(self,response): 
    self.count += 1 #设置我们需要爬去多少页,不设置的话会有几百页需要爬取 
    name = response.xpath('//table//td[@class="l square"]//a//text()').extract() 
    #通过xpath方法获取我们需要的内容,再使用extract()抽取器获取到 
    for i in name:    #利用循环将每一次的内容存入我们上面设置的列表中去,方便后面存入csv文件(下面4个类似) 
      self.names.append(i) 
    genre = response.xpath('//table//tr[not(@class="h")]//td[2][not(@align="center")]//text()').extract() 
    for i in genre: 
      self.genres.append(i) 
    number = response.xpath('//table//tr[not(@class="h")]//td[3][not(@align="center")]//text()').extract() 
    for i in number: 
      self.numbers.append(i) 
    place = response.xpath('//table//tr[not(@class="h")]//td[4][not(@align="center")]//text()').extract() 
    for i in place: 
      self.places.append(i) 
    time = response.xpath('//table//tr[not(@class="h")]//td[5][not(@align="center")]//text()').extract() 
    for i in time: 
      self.times.append(i) 
 
    new_url = response.xpath('//*[@id="next"]//@href').extract() 
    #前面我们说过需要翻页操作,所以这里是获取到翻页的后缀 
    new_url = self.url+new_url[0] #再与前缀结合,获取到一个完整的下一页链接 
    sleep(0.5) #我们设置一个翻页的时间,太快了不好。。。。(我是这样想的) 
 
    #下面就是信息存入items容器 
    for i in range(len(self.genres)): #for循环列表的长度,获取到所有信息 
      info = GetItem()  #实例一个类info用来保存数据 
      info["name"] = self.names[i]    #将每一个属性列表中的每一个数据保存依次保存到info中去 
      info["genre"] = self.genres[i] 
      info["number"] = self.numbers[i] 
      info["place"] = self.places[i] 
      info["time"] = self.times[i] 
      yield info #这个yield注意了,嗯,这就很舒服了 
      #我们将每一次保存的数据返回,但是返回了我们还需要程序继续执行,所以使用yield函数返回后继续执行 
 
    if self.count<=20: 
      yield Request(url=new_url,callback=self.parse) 
      #如果满足20页以内,我们callback返回下一页的链接继续到parse这个默认函数,

以上是spider中的代码。

其实实现这个代码不难,唯一有一点小疑惑的地方可能就是第一个yield的使用,一开始我是使用调用一个新的函数,然后在里面实现值的返回,但是麻烦还有一点小问题,所以这里我们就是用这种简单的方式就行了,yield将每次循环的数据返回,返回后再继续执行循环。

总结

以上就是本文关于python3使用scrapy生成csv文件代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
Python max内置函数详细介绍
Nov 17 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
快速解决pymongo操作mongodb的时区问题
Dec 05 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
Python3中PyQt5简单实现文件打开及保存
Jun 10 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 #Python
scrapy爬虫实例分享
Dec 28 #Python
Python解决N阶台阶走法问题的方法分析
Dec 28 #Python
Python实现嵌套列表去重方法示例
Dec 28 #Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 #Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 #Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 #Python
You might like
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
php正则表达匹配中文问题分析小结
2012/03/25 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
php递归函数怎么用才有效
2018/02/24 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
JS数组去重的6种方法完整实例
2018/12/08 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
vue项目引入ts步骤(小结)
2019/10/31 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
浅谈编码,解码,乱码的问题
2016/12/30 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
python 读取数据库并绘图的实例
2019/12/03 Python
解决python运行启动报错问题
2020/06/01 Python
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
鼓励运动员的广播稿
2014/02/08 职场文书
教师求职自荐信
2014/03/09 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang