Python爬虫框架Scrapy实例代码


Posted in Python onMarch 04, 2018

目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间。

一、创建Scrapy项目

scrapy startproject Tencent

命令执行后,会创建一个Tencent文件夹,结构如下

二、编写item文件,根据需要爬取的内容定义爬取字段

# -*- coding: utf-8 -*-
import scrapy
class TencentItem(scrapy.Item):
  # 职位名
  positionname = scrapy.Field()
  # 详情连接
  positionlink = scrapy.Field()
  # 职位类别
  positionType = scrapy.Field()
  # 招聘人数
  peopleNum = scrapy.Field()
  # 工作地点
  workLocation = scrapy.Field()
  # 发布时间
  publishTime = scrapy.Field()

三、编写spider文件

进入Tencent目录,使用命令创建一个基础爬虫类:

# tencentPostion为爬虫名,tencent.com为爬虫作用范围
scrapy genspider tencentPostion "tencent.com"

执行命令后会在spiders文件夹中创建一个tencentPostion.py的文件,现在开始对其编写:

# -*- coding: utf-8 -*-
import scrapy
from tencent.items import TencentItem
class TencentpositionSpider(scrapy.Spider):
  """
  功能:爬取腾讯社招信息
  """
  # 爬虫名
  name = "tencentPosition"
  # 爬虫作用范围
  allowed_domains = ["tencent.com"]
  url = "http://hr.tencent.com/position.php?&start="
  offset = 0
  # 起始url
  start_urls = [url + str(offset)]
  def parse(self, response):
    for each in response.xpath("//tr[@class='even'] | //tr[@class='odd']"):
      # 初始化模型对象
      item = TencentItem()
      # 职位名称
      item['positionname'] = each.xpath("./td[1]/a/text()").extract()[0]
      # 详情连接
      item['positionlink'] = each.xpath("./td[1]/a/@href").extract()[0]
      # 职位类别
      item['positionType'] = each.xpath("./td[2]/text()").extract()[0]
      # 招聘人数
      item['peopleNum'] = each.xpath("./td[3]/text()").extract()[0]
      # 工作地点
      item['workLocation'] = each.xpath("./td[4]/text()").extract()[0]
      # 发布时间
      item['publishTime'] = each.xpath("./td[5]/text()").extract()[0]
      yield item
    if self.offset < 1680:
      self.offset += 10
    # 每次处理完一页的数据之后,重新发送下一页页面请求
    # self.offset自增10,同时拼接为新的url,并调用回调函数self.parse处理Response
    yield scrapy.Request(self.url + str(self.offset), callback = self.parse)

四、编写pipelines文件

# -*- coding: utf-8 -*-
import json
class TencentPipeline(object):
""" 
    功能:保存item数据 
  """
  def __init__(self):
    self.filename = open("tencent.json", "w")
  def process_item(self, item, spider):
    text = json.dumps(dict(item), ensure_ascii = False) + ",\n"
    self.filename.write(text.encode("utf-8"))
    return item
  def close_spider(self, spider):
    self.filename.close()

五、settings文件设置(主要设置内容)

# 设置请求头部,添加url
DEFAULT_REQUEST_HEADERS = {
  "User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
# 设置item——pipelines
ITEM_PIPELINES = {
  'tencent.pipelines.TencentPipeline': 300,
}

执行命令,运行程序

# tencentPosition为爬虫名
scrapy crwal tencentPosition

使用CrawlSpider类改写

# 创建项目
scrapy startproject TencentSpider
# 进入项目目录下,创建爬虫文件
scrapy genspider -t crawl tencent tencent.com
item等文件写法不变,主要是爬虫文件的编写
# -*- coding:utf-8 -*-
import scrapy
# 导入CrawlSpider类和Rule
from scrapy.spiders import CrawlSpider, Rule
# 导入链接规则匹配类,用来提取符合规则的连接
from scrapy.linkextractors import LinkExtractor
from TencentSpider.items import TencentItem
class TencentSpider(CrawlSpider):
  name = "tencent"
  allow_domains = ["hr.tencent.com"]
  start_urls = ["http://hr.tencent.com/position.php?&start=0#a"]
  # Response里链接的提取规则,返回的符合匹配规则的链接匹配对象的列表
  pagelink = LinkExtractor(allow=("start=\d+"))
  rules = [
    # 获取这个列表里的链接,依次发送请求,并且继续跟进,调用指定回调函数处理
    Rule(pagelink, callback = "parseTencent", follow = True)
  ]
  # 指定的回调函数
  def parseTencent(self, response):
    for each in response.xpath("//tr[@class='even'] | //tr[@class='odd']"):
      item = TencentItem()
      # 职位名称
      item['positionname'] = each.xpath("./td[1]/a/text()").extract()[0]
      # 详情连接
      item['positionlink'] = each.xpath("./td[1]/a/@href").extract()[0]
      # 职位类别
      item['positionType'] = each.xpath("./td[2]/text()").extract()[0]
      # 招聘人数
      item['peopleNum'] = each.xpath("./td[3]/text()").extract()[0]
      # 工作地点
      item['workLocation'] = each.xpath("./td[4]/text()").extract()[0]
      # 发布时间
      item['publishTime'] = each.xpath("./td[5]/text()").extract()[0]
      yield item

总结

以上所述是小编给大家介绍的Python爬虫框架Scrapy实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
python简单实现获取当前时间
Aug 27 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
python简单区块链模拟详解
Jul 03 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
python动态视频下载器的实现方法
Sep 16 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
python实现logistic分类算法代码
Feb 28 Python
java字符串格式化输出实例讲解
Jan 06 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 Python
详解python中asyncio模块
Mar 03 #Python
python3.6+django2.0开发一套学员管理系统
Mar 03 #Python
python爬虫面试宝典(常见问题)
Mar 02 #Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 #Python
谈谈python中GUI的选择
Mar 01 #Python
纯python实现机器学习之kNN算法示例
Mar 01 #Python
用python与文件进行交互的方法
Mar 01 #Python
You might like
无线电广播的开始
2002/01/30 无线电
3
2006/10/09 PHP
php数据库抽象层 PDO
2011/05/07 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
jquery.validate使用攻略 第一部
2010/07/01 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
Python中常用的8种字符串操作方法
2019/05/06 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
Python如何实现动态数组
2019/11/02 Python
python实现名片管理器的示例代码
2019/12/17 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
机关作风建设整改方案
2014/10/27 职场文书
教师求职信怎么写
2015/03/20 职场文书
钱学森电影观后感
2015/06/04 职场文书
学校教师培训工作总结
2015/10/14 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android