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命令行参数sys.argv使用示例
Jan 28 Python
Python 模拟员工信息数据库操作的实例
Oct 23 Python
python学生信息管理系统
Mar 13 Python
使用Python进行目录的对比方法
Nov 01 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
Python FFT合成波形的实例
Dec 04 Python
python为QT程序添加图标的方法详解
Mar 09 Python
python爬取youtube视频的示例代码
Mar 03 Python
Python超简单容易上手的画图工具库推荐
May 10 Python
python库sklearn常用操作
Aug 23 Python
Python之基础函数案例详解
Aug 30 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
php 空格,换行,跳格使用说明
2009/12/18 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
详解php中反射的应用
2016/03/15 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
js文字横向滚动特效
2015/11/11 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
如何真正的了解python装饰器
2020/08/14 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
招商经理岗位职责
2013/11/16 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
英语邀请函范文
2015/02/02 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技