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的类变量和成员变量用法实例教程
Aug 25 Python
python搜索指定目录的方法
Apr 29 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
Python工程师面试必备25条知识点
Jan 17 Python
Python实现将数据写入netCDF4中的方法示例
Aug 30 Python
python五子棋游戏的设计与实现
Jun 18 Python
python 搜索大文件的实例代码
Jul 08 Python
详解Python对JSON中的特殊类型进行Encoder
Jul 15 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
Aug 02 Python
关于 Python json中load和loads区别
Nov 07 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
生成缩略图
2006/10/09 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
2010/03/01 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
附答案的Java面试题
2012/11/19 面试题
夜大毕业自我鉴定
2013/10/11 职场文书
酒店前台接待岗位职责
2013/12/03 职场文书
会议邀请函范文
2014/01/09 职场文书
手机银行营销方案
2014/03/14 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
服务行业口号
2014/06/11 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python