Scrapy框架爬取Boss直聘网Python职位信息的源码


Posted in Python onFebruary 22, 2019

分析

使用CrawlSpider结合LinkExtractor和Rule爬取网页信息

LinkExtractor用于定义链接提取规则,一般使用allow参数即可

LinkExtractor(allow=(), # 使用正则定义提取规则
       deny=(), # 排除规则
       allow_domains=(), # 限定域名范围
       deny_domains=(), # 排除域名范围
       restrict_xpaths=(), # 使用xpath定义提取队则
       tags=('a', 'area'), 
       attrs=('href',), 
       canonicalize=False,
       unique=True, 
       process_value=None,
       deny_extensions=None, 
       restrict_css=(), # 使用css选择器定义提取规则
       strip=True):

Rule用于定义CrawlSpider的爬取规则,由Spider内部自动识别,提交请求、获取响应,交给callback指定的回调方法处理response

如果指定了callback,参数follow默认为False;如果callback为None,follow默认为True

Rule(link_extractor, # LinkExtractor对象,必选参数
   callback=None, # 回调方法,可选
   cb_kwargs=None, 
   follow=None, # 是否进行深度爬取,True、False
   process_links=None, # 用于处理链接(有些反爬策略是返回假的url)
   process_request=identity)

源码

items.py

class BosszhipinItem(scrapy.Item):
  """Boss直聘Pytho职位爬虫Item"""
  # 职位名称
  position=scrapy.Field()
  # 公司名称
  company=scrapy.Field()
  # 薪资
  salary=scrapy.Field()
  # 工作地点
  location=scrapy.Field()
  # 学历要求
  education=scrapy.Field()
  # 工作时间
  year=scrapy.Field()

spiders/bosszhipin_spider.py

# !/usr/bin/env python
# -*- coding:utf-8 -*-
import scrapy
from scrapy.spider import CrawlSpider,Rule
from scrapy.linkextractors import LinkExtractor
from myscrapy.items import BosszhipinItem
class BosszhipinSpider(CrawlSpider):
  """
  Boss直聘Python职位爬虫Spider
    使用CrawlSpider基类实现
  """
  name = 'bosszhipin'
  allowed_domains=['zhipin.com',]
  start_urls=['http://www.zhipin.com/c100010000/h_100010000/?query=Python&page=1',]
  # 链接提取器对象(规定链接提取规则)
  link_extractor=LinkExtractor(allow=(r'page=\d+'))
  # 链接提取规则对象列表
  # 自动调用callback指定的方法,去取爬取由link_extractor指定的链接提取规则匹配到的url
  # 原理:link_extractor.extract_links(response)返回匹配到的链接
  rules = [
    Rule(link_extractor=link_extractor,callback='parse_page',follow=True),
  ]
  def parse_page(self,response):
    """定义回调方法,用于解析每个response对象"""
    job_list=response.xpath('//div[@class="job-list"]//li')
    for job in job_list:
      position = job.xpath('.//div[@class="info-primary"]//h3[@class="name"]/a/text()')[0].extract()
      salary =job.xpath('.//div[@class="info-primary"]//h3[@class="name"]//span/text()')[0].extract()
      company =job.xpath('.//div[@class="company-text"]//a/text()')[0].extract()
      location =job.xpath('.//div[@class="info-primary"]/p/text()[1]')[0].extract()
      year =job.xpath('.//div[@class="info-primary"]/p/text()[2]')[0].extract()
      education =job.xpath('.//div[@class="info-primary"]/p/text()[3]')[0].extract()
      item=BosszhipinItem()
      item['position']=position
      item['salary']=salary
      item['company']=company
      item['location']=location
      item['year']=year
      item['education']=education
      yield item

pipelines.py

class BosszhipinPipeline(object):
  """Boss直聘Python职位爬虫Item Pipeline"""
  def __init__(self):
    self.f=open('data/bosszhipin.json',mode='wb')
    self.f.write(b'[')
  def process_item(self,item,spider):
    data=json.dumps(dict(item),ensure_ascii=False,indent=4)
    self.f.write(data.encode('utf-8'))
    self.f.write(b',')
    return item
  def close_spider(self,spider):
    self.f.write(b']')
    self.f.close()

settings.py

ITEM_PIPELINES = {
  'myscrapy.pipelines.BosszhipinPipeline': 1,
}

运行结果

Scrapy框架爬取Boss直聘网Python职位信息的源码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python实现每次处理一个字符的三种方法
Oct 09 Python
python3使用scrapy生成csv文件代码示例
Dec 28 Python
Python实现识别手写数字大纲
Jan 29 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
在双python下设置python3为默认的方法
Oct 31 Python
Python列表(List)知识点总结
Feb 18 Python
python GUI实现小球满屏乱跑效果
May 09 Python
Pyqt5自适应布局实例
Dec 13 Python
python实现图片素描效果
Sep 26 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
pandas修改DataFrame列名的实现方法
Feb 22 #Python
pyhanlp安装介绍和简单应用
Feb 22 #Python
Python3.7 dataclass使用指南小结
Feb 22 #Python
Python文件读写常见用法总结
Feb 22 #Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 #Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 #Python
浅谈python3.6的tkinter运行问题
Feb 22 #Python
You might like
PHP简单选择排序算法实例
2015/01/26 PHP
php建立Ftp连接的方法
2015/03/07 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
深入理解Python3中的http.client模块
2017/03/29 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
python把一个字符串切开的实例方法
2020/09/27 Python
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
物理教育专业毕业生推荐信
2013/11/03 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
小学优秀班主任材料
2014/12/17 职场文书
学生个人评语大全
2015/01/04 职场文书
监考失职检讨书
2015/01/26 职场文书
单位接收函范文
2015/01/30 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
python 爬取天气网卫星图片
2021/06/07 Python