CrawlSpider继承Spider,提供了强大的爬取规则(Rule)供使用

填充custom_settings,浏览器中的请求头

from datetime import datetimeimport scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rulefrom ArticleSpider.items import LagouJobItem, LagouJobItemLoader
from ArticleSpider.utils.common import get_md5class LagouSpider(CrawlSpider):name = 'lagou'allowed_domains = ['www.lagou.com']start_urls = ['https://www.lagou.com/']custom_settings = {}rules = (Rule(LinkExtractor(allow=("zhaopin/.*",)), follow=True),Rule(LinkExtractor(allow=("gongsi/j\d+.html",)), follow=True),Rule(LinkExtractor(allow=r'jobs/\d+.html'), callback='parse_job', follow=True),)def parse_job(self, response):# 解析拉勾网的职位item_loader = LagouJobItemLoader(item=LagouJobItem(), response=response)item_loader.add_css("title", ".job-name::attr(title)")item_loader.add_value("url", response.url)item_loader.add_value("url_object_id", get_md5(response.url))item_loader.add_css("salary", ".job_request .salary::text")item_loader.add_xpath("job_city", "//*[@class='job_request']/p/span[2]/text()")item_loader.add_xpath("work_years", "//*[@class='job_request']/p/span[3]/text()")item_loader.add_xpath("degree_need", "//*[@class='job_request']/p/span[4]/text()")item_loader.add_xpath("job_type", "//*[@class='job_request']/p/span[5]/text()")item_loader.add_css("tags", '.position-label li::text')item_loader.add_css("publish_time", ".publish_time::text")item_loader.add_css("job_advantage", ".job-advantage p::text")item_loader.add_css("job_desc", ".job_bt div")item_loader.add_css("job_addr", ".work_addr")item_loader.add_css("company_name", "#job_company dt a img::attr(alt)")item_loader.add_css("company_url", "#job_company dt a::attr(href)")item_loader.add_value("crawl_time", datetime.now())job_item = item_loader.load_item()return job_item
class LagouJobItemLoader(ItemLoader):#自定义itemloaderdefault_output_processor = TakeFirst()class LagouJobItem(scrapy.Item):#拉勾网职位信息title = scrapy.Field()url = scrapy.Field()url_object_id = scrapy.Field()salary = scrapy.Field()job_city = scrapy.Field(input_processor=MapCompose(remove_splash),)work_years = scrapy.Field(input_processor = MapCompose(remove_splash),)degree_need = scrapy.Field(input_processor = MapCompose(remove_splash),)job_type = scrapy.Field()publish_time = scrapy.Field()job_advantage = scrapy.Field()job_desc = scrapy.Field()job_addr = scrapy.Field(input_processor=MapCompose(remove_tags, handle_jobaddr),)company_name = scrapy.Field()company_url = scrapy.Field()tags = scrapy.Field(input_processor = Join(","))crawl_time = scrapy.Field()def get_insert_sql(self):insert_sql = """insert into lagou_job(title, url, url_object_id, salary, job_city, work_years, degree_need,job_type, publish_time, job_advantage, job_desc, job_addr, company_name, company_url,tags, crawl_time) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)ON DUPLICATE KEY UPDATE salary=VALUES(salary), job_desc=VALUES(job_desc)"""params = (self["title"], self["url"], self["url_object_id"], self["salary"], self["job_city"],self["work_years"], self["degree_need"], self["job_type"],self["publish_time"], self["job_advantage"], self["job_desc"],self["job_addr"], self["company_name"], self["company_url"],self["job_addr"], self["crawl_time"].strftime(SQL_DATETIME_FORMAT),)return insert_sql, params
SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for lagou_job
-- ----------------------------
DROP TABLE IF EXISTS `lagou_job`;
CREATE TABLE `lagou_job` (`title` varchar(255) NOT NULL,`url` varchar(255) NOT NULL,`url_object_id` varchar(50) NOT NULL,`salary` varchar(20) DEFAULT NULL,`job_city` varchar(255) DEFAULT NULL,`work_years` varchar(255) DEFAULT NULL,`degree_need` varchar(255) DEFAULT NULL,`job_type` varchar(255) DEFAULT NULL,`tags` varchar(255) DEFAULT NULL,`publish_time` varchar(20) NOT NULL,`job_advantage` varchar(255) DEFAULT NULL,`job_desc` longtext NOT NULL,`job_addr` varchar(255) DEFAULT NULL,`company_name` varchar(255) DEFAULT NULL,`company_url` varchar(255) DEFAULT NULL,`crawl_time` datetime NOT NULL,`crawl_update_time` datetime DEFAULT NULL,PRIMARY KEY (`url_object_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

转载于:https://www.cnblogs.com/gaoyongjian/p/9905379.html

CrawlSpider爬取拉钩相关推荐

  1. python 爬取拉钩数据

    Python通过Request库爬取拉钩数据 爬取方法 数据页面 建表存储职位信息 解析页面核心代码 完整代码 结果展示 爬取方法 采用python爬取拉钩数据,有很多方法可以爬取,我采用的是通过Re ...

  2. 【2019.05】python 爬取拉钩数据(静态+动态)

    拉钩这个网站有点意思,页面加载有两种方法 点击首页的标签,页面是静态加载的 直接搜索,页是动态加载的 两种爬取方式不一样,这里都实现了. 动态爬取时会出现 '操作太频繁,请稍后再试'字样,出现这种情况 ...

  3. python爬取拉钩python数据分析职位招聘信息

    python数据分析 python数据分析是目前python最火的方向之一,为了解目前市场对该职位的需求,我们爬取了拉钩上对pythons数据分析的招聘信息. 环境 系统:windows7 pytho ...

  4. 爬取拉钩 破解拉钩反爬机制

    破解拉钩反爬 实现爬取内容 拉钩的反爬很厉害 没毛病 老铁!! 我们现在来研究一下拉钩的请求头先 导入的有一个ip池(get_ip) ip池可以不写 用自己的也不会被封掉还有我是第一次写这些文章 给个 ...

  5. Python爬虫实现全自动爬取拉钩教育视频

    ps:改良之后的多线程版本在最后 背景 大饼加了不少技术交流群,之前在群里看到拉钩教育平台在做活动,花了1块钱买了套课程.比较尴尬的是大饼一般都会在上下班的路中学习下(路上时间比较久)而这个视频无法缓 ...

  6. python 爬取拉钩招聘数据

    上一篇介绍在linux 搭建jupter lab,本文将介绍python数据接口的爬取以及提取建模分析的数据 导入依赖的包 import requests import time from urlli ...

  7. 爬取拉钩Java招聘数据

    下面源代码: 1 # -*- coding: utf-8 -*- 2 from bs4 import BeautifulSoup 3 import requests 4 from lxml impor ...

  8. 用request模块爬取拉钩招聘信息

    from urllib import request from urllib import parse# url = "https://www.lagou.com/jobs/list_pyt ...

  9. scrapy 抓取拉钩 ajax

    # -*- coding: utf-8 -*- github上有scrapy版本,抓取拉钩7W条数据 import scrapy from LagouSpider.items import Lagou ...

最新文章

  1. 两个有序数组的中位数(第k大的数)
  2. Mysql访问新数据时先查表
  3. Arm v8 中断处理
  4. 会赚钱的人共有的特征,你是吗?
  5. 前端学习(2146):vue中TypeError: this.getResolve is not a function
  6. Print() 语句以及数字赋值语句 中if-else的使用
  7. 黄金为什么贵,黄金都有什么用处?
  8. Linux ubuntu基本知识
  9. GIS空间分析之Buffer
  10. 声音以模拟信号的形式存储在计算机中,08计算机1-2班《计算机基础》自学资料(5)...
  11. 文件存储php源码,FFS5-Mini v120731 最终版 php网络文件存储分享系统
  12. 7-2 排座位 (25 分)
  13. Houdini 中DOP CHOP SHOP SOP VOP是什么?
  14. 中文自动文本摘要生成指标计算,Rouge/Bleu/BertScore/QA代码实现
  15. 在js中实现新窗口打开页面
  16. 在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句
  17. Signature expired
  18. 简单平面点云的内外侧轮廓提取
  19. java lamda 常用写法 List篇
  20. 如何获取中文文献的英文参考文献信息

热门文章

  1. Ethereum智能合约迁移到PlatON教程
  2. Oracle版本升级后引出的catalog连接问题
  3. 研究生毕业3年,年薪从5万到20万的经历
  4. 李善友:中国可以活3年以上的企业不到10%
  5. 用python制作贺卡_使用Python创作自己的圣诞节动图贺卡,制作简单即刻生成
  6. STM32--0.96寸OLED显示屏
  7. Unity 3D 入门基础
  8. 【Unity】Particle System 下雪粒子特效
  9. stm32h750从上电到main函数时间
  10. 烟草专卖生产企业许可证