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随机生成一个6位的验证码代码分享
Mar 24 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
Django项目中model的数据处理以及页面交互方法
May 30 Python
python 批量修改/替换数据的实例
Jul 25 Python
python读取Excel实例详解
Aug 17 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
python中实现控制小数点位数的方法
Jan 24 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
如何在django中添加日志功能
Feb 06 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
Python实现仓库管理系统
May 30 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程序占用多少内存(memory_get_usage)
2012/09/23 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
php构造函数与析构函数
2016/04/23 PHP
php日期操作技巧小结
2016/06/25 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
js创建数组的简单方法
2016/07/27 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
解析vue中的$mount
2017/12/21 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
js实现筛选功能
2020/11/24 Javascript
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
Python如何优雅删除字符列表空字符及None元素
2020/06/25 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
高中军训感言800字
2014/03/05 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
小学生环保标语
2014/06/13 职场文书
计算机实训报告总结
2014/11/05 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书