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 相关文章推荐
在Linux下调试Python代码的各种方法
Apr 17 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
一张图带我们入门Python基础教程
Feb 05 Python
python抓取文件夹的所有文件
Feb 27 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
Python玩转Excel的读写改实例
Feb 22 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Python表达式的优先级详解
Feb 18 Python
使用pth文件添加Python环境变量方式
May 26 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 Undefined index的问题
2009/06/01 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
php下批量挂马和批量清马代码
2011/02/27 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
Egret引擎开发指南之发布项目
2014/09/03 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
Python数据结构之单链表详解
2017/09/12 Python
Python callable()函数用法实例分析
2018/03/17 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
德国足球商店:OUTFITTER
2019/05/06 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
煤矿安全生产月活动总结
2014/07/05 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
早会开场白台词大全
2015/06/01 职场文书
2016银行求职自荐信
2016/01/28 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
python 远程执行命令的详细代码
2022/02/15 Python