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. c4d+ps打造抽象NFT加密艺术 Create Abstract NFT Crypto Art with Cinema 4D + Photoshop
  2. 09day ASM单实例安装部署,并在ASM上安装oracle数据库
  3. [luogu4389]付公主的背包
  4. linux rsync 常见错误,Linux rsync常见错误
  5. 苹果cmsv10精仿迅播影院2tu风格主题模板
  6. tensorflow对应的numpy版本_版本更新 | TensorFlow 2.4.0 候选版本发布
  7. 在线中文繁简体转换工具
  8. 解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 问题(转)
  9. EF Commander v19.08破解版
  10. java学习心得---循环结构
  11. 企业部署WAPI无线网络的技术详析
  12. UWB定位系统LinkPro
  13. Linux普通用户执行root权限脚本且没有读写权限
  14. bzoj #1854 游戏(二分图匹配)
  15. 电子科技大学计算机学院拟录取,2021年电子科技大学硕士研究生拟录取名单
  16. 面经分享|中科院老哥的算法开发岗面经总结
  17. 韩信点兵的问题求解方法
  18. 【技美百人计划】美术 2.2 模型基础
  19. 【面朝大厂】面试官:说几种常用的分布式 ID 解决方案
  20. python 一个月有多少天_python中一个月有多少天

热门文章

  1. 【ceph】什么是Ceph?------(MinIO和ceph的区别|GFS(GlusterFS)、MFS、Ceph、Lustre|文档)
  2. Scala入门_开发环境安装
  3. [WPF系列] 高级 调试
  4. XSS闯关——第五关:level5
  5. 仿ofo单车做一个轮播效果
  6. 逻辑卷管理员(Logical Volume Manager)介绍
  7. 51c语言字符,51单片机C语言教程(九) 语句应用
  8. 5万块钱的笔记本,没能让苹果“炸场”
  9. 海底捞只要“面子”,不要“里子”?
  10. 微型计算机故障处理基本原则,微机故障处理的一般性原则和方法