CrawlSpider爬取拉钩
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爬取拉钩相关推荐
- python 爬取拉钩数据
Python通过Request库爬取拉钩数据 爬取方法 数据页面 建表存储职位信息 解析页面核心代码 完整代码 结果展示 爬取方法 采用python爬取拉钩数据,有很多方法可以爬取,我采用的是通过Re ...
- 【2019.05】python 爬取拉钩数据(静态+动态)
拉钩这个网站有点意思,页面加载有两种方法 点击首页的标签,页面是静态加载的 直接搜索,页是动态加载的 两种爬取方式不一样,这里都实现了. 动态爬取时会出现 '操作太频繁,请稍后再试'字样,出现这种情况 ...
- python爬取拉钩python数据分析职位招聘信息
python数据分析 python数据分析是目前python最火的方向之一,为了解目前市场对该职位的需求,我们爬取了拉钩上对pythons数据分析的招聘信息. 环境 系统:windows7 pytho ...
- 爬取拉钩 破解拉钩反爬机制
破解拉钩反爬 实现爬取内容 拉钩的反爬很厉害 没毛病 老铁!! 我们现在来研究一下拉钩的请求头先 导入的有一个ip池(get_ip) ip池可以不写 用自己的也不会被封掉还有我是第一次写这些文章 给个 ...
- Python爬虫实现全自动爬取拉钩教育视频
ps:改良之后的多线程版本在最后 背景 大饼加了不少技术交流群,之前在群里看到拉钩教育平台在做活动,花了1块钱买了套课程.比较尴尬的是大饼一般都会在上下班的路中学习下(路上时间比较久)而这个视频无法缓 ...
- python 爬取拉钩招聘数据
上一篇介绍在linux 搭建jupter lab,本文将介绍python数据接口的爬取以及提取建模分析的数据 导入依赖的包 import requests import time from urlli ...
- 爬取拉钩Java招聘数据
下面源代码: 1 # -*- coding: utf-8 -*- 2 from bs4 import BeautifulSoup 3 import requests 4 from lxml impor ...
- 用request模块爬取拉钩招聘信息
from urllib import request from urllib import parse# url = "https://www.lagou.com/jobs/list_pyt ...
- scrapy 抓取拉钩 ajax
# -*- coding: utf-8 -*- github上有scrapy版本,抓取拉钩7W条数据 import scrapy from LagouSpider.items import Lagou ...
最新文章
- 两个有序数组的中位数(第k大的数)
- Mysql访问新数据时先查表
- Arm v8 中断处理
- 会赚钱的人共有的特征,你是吗?
- 前端学习(2146):vue中TypeError: this.getResolve is not a function
- Print() 语句以及数字赋值语句 中if-else的使用
- 黄金为什么贵,黄金都有什么用处?
- Linux ubuntu基本知识
- GIS空间分析之Buffer
- 声音以模拟信号的形式存储在计算机中,08计算机1-2班《计算机基础》自学资料(5)...
- 文件存储php源码,FFS5-Mini v120731 最终版 php网络文件存储分享系统
- 7-2 排座位 (25 分)
- Houdini 中DOP CHOP SHOP SOP VOP是什么?
- 中文自动文本摘要生成指标计算,Rouge/Bleu/BertScore/QA代码实现
- 在js中实现新窗口打开页面
- 在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句
- Signature expired
- 简单平面点云的内外侧轮廓提取
- java lamda 常用写法 List篇
- 如何获取中文文献的英文参考文献信息