2.简单爬虫————爬取拉勾网招聘信息(一)
该文章仅供学习,如有错误,欢迎指出
1.开始创建一个项目
mkdir lagou
2.进入到文件夹下创建python3的虚拟环境
pipenv install scrapy
3.进入pipenv 下使用scrapy命令创建爬虫项目
pipenv shell
scrapy startproject lagou
cd lagou
scrapy genspider -o crawl test www.lagou.com
Scrapy 为我们提供了四种模板,根据不同的网页类型,我们可以选用不同的爬虫模板,这里我们使用的是crawl模板
class TestSpider(CrawlSpider):name = 'test'allowed_domains = ['https://www.lagou.com']start_urls = ['https://www.lagou.com/']rules = (Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),)def parse_item(self, response):i = {}#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()#i['name'] = response.xpath('//div[@id="name"]').extract()#i['description'] = response.xpath('//div[@id="description"]').extract()return i#crawl模板代码
解释spider-crawl模板
class CrawlSpider(Spider):rules = ()def __init__(self, *a, **kw):super(CrawlSpider, self).__init__(*a, **kw)self._compile_rules()def parse(self, response):return self._parse_response(response, self.parse_start_url, cb_kwargs={}, follow=True)def parse_start_url(self, response):return []def process_results(self, response, results):return resultsdef _build_request(self, rule, link):r = Request(url=link.url, callback=self._response_downloaded)r.meta.update(rule=rule, link_text=link.text)return rdef _requests_to_follow(self, response):if not isinstance(response, HtmlResponse):returnseen = set()for n, rule in enumerate(self._rules):links = [lnk for lnk in rule.link_extractor.extract_links(response)if lnk not in seen]if links and rule.process_links:links = rule.process_links(links)for link in links:seen.add(link)r = self._build_request(n, link)yield rule.process_request(r)def _response_downloaded(self, response):rule = self._rules[response.meta['rule']]return self._parse_response(response, rule.callback, rule.cb_kwargs, rule.follow)def _parse_response(self, response, callback, cb_kwargs, follow=True):if callback:cb_res = callback(response, **cb_kwargs) or ()cb_res = self.process_results(response, cb_res)for requests_or_item in iterate_spider_output(cb_res):yield requests_or_itemif follow and self._follow_links:for request_or_item in self._requests_to_follow(response):yield request_or_itemdef _compile_rules(self):def get_method(method):if callable(method):return methodelif isinstance(method, six.string_types):return getattr(self, method, None)self._rules = [copy.copy(r) for r in self.rules]for rule in self._rules:rule.callback = get_method(rule.callback)rule.process_links = get_method(rule.process_links)rule.process_request = get_method(rule.process_request)@classmethoddef from_crawler(cls, crawler, *args, **kwargs):spider = super(CrawlSpider, cls).from_crawler(crawler, *args, **kwargs)spider._follow_links = crawler.settings.getbool('CRAWLSPIDER_FOLLOW_LINKS', True)return spiderdef set_crawler(self, crawler):super(CrawlSpider, self).set_crawler(crawler)self._follow_links = crawler.settings.getbool('CRAWLSPIDER_FOLLOW_LINKS', True)
start_urls定义了初始爬取的网页地址
(一)使用parse_start_url去对start_urls作处理
def parse_start_url(self, response): return []
#源码里面返回一个空的列表,如果要运行爬虫,我们需要对他进行处理
(二)使用parse对parse_start_url解析后的response进行处理,并且把结果交给_parse_response方法
这里的self.parse_start_url, cb_kwargs={}都为回调函数,一个为开始的网址,一个用来收集rule下的callback函数
rules = (Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),)
Rule是CrawlSpider模板爬取内容的规则,如果Follow是False,那么爬虫只会爬取符合allow的网页。
而如果follows是True,那么爬虫会爬取start_urls的网页下的所有符合allow的网页连接
rule无论有无callback,都由同一个_parse_response函数处理,只不过他会判断是否有follow和callback
对Rule的解释在文章下面
def parse(self, response):return self._parse_response(response, self.parse_start_url, cb_kwargs={}, follow=True)#
(三)判断接受的内容是否为回调函数(该回调函数可能是rule中的解析函数,也可能是 parse_start_url函数)
如果是parse_start_url的函数,则会交给process_results处理。返回cb_res的一个列表
使用iterate_spider_output对列表进行操作,返回item,如果选择了follows那么会把response下的url继续跟进
def _parse_response(self, response, callback, cb_kwargs, follow=True):if callback:cb_res = callback(response, **cb_kwargs) or ()cb_res = self.process_results(response, cb_res)for requests_or_item in iterate_spider_output(cb_res):yield requests_or_itemif follow and self._follow_links:for request_or_item in self._requests_to_follow(response):yield request_or_item
(四)
def _requests_to_follow(self, response):if not isinstance(response, HtmlResponse):returnseen = set()for n, rule in enumerate(self._rules):links = [lnk for lnk in rule.link_extractor.extract_links(response)if lnk not in seen]if links and rule.process_links:links = rule.process_links(links)for link in links:seen.add(link)r = self._build_request(n, link)yield rule.process_request(r)
对Rule的解释
class Rule(object):def __init__(self, link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=identity):self.link_extractor = link_extractorself.callback = callbackself.cb_kwargs = cb_kwargs or {}self.process_links = process_linksself.process_request = process_requestif follow is None:self.follow = False if callback else Trueelse:self.follow = follow
对模板的理解有些不足,之后会慢慢补
2.简单爬虫————爬取拉勾网招聘信息(一)相关推荐
- Python爬虫实战之一 - 基于Requests爬取拉勾网招聘信息,并保存至本地csv文件
Python爬虫实战之二 - 基于Requests抓取拉勾网招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于小白,本 ...
- 【python爬虫02】使用Scrapy框架爬取拉勾网招聘信息
使用Scrapy框架爬取拉勾网招聘信息 最近接触了Scrapy爬虫框架,简单写了个爬虫爬取拉钩网的招聘信息,加深对Scrapy框架的理解,不得不说Scrapy框架其实还是蛮方便的,就像爬虫流水线一样, ...
- Python搭建代理池爬取拉勾网招聘信息
先来看一张图了解下爬虫 实现功能 多线程爬取拉勾网招聘信息 维护代理 ip 池 搭建 node 服务器 Taro 使用 echarts 做数据分析 1.多线程爬取拉勾网招聘信息 Tip:涉及知识 1. ...
- java爬虫拉勾网_[Java教程]node.js爬虫爬取拉勾网职位信息
[Java教程]node.js爬虫爬取拉勾网职位信息 0 2017-03-14 00:00:21 简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳 ...
- 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(一)
文章目录 前言 一.准备我们的库 二.分析分析 三. 代码 四.数据展示 小唐的心路历程 上一篇:没有啦! 下一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(二) 前言 有 ...
- 什么你还不知道招聘信息,小唐来教你——最新2021爬取拉勾网招聘信息(二)
文章目录 前言 一.准备我们的库 二.数据清洗 三.核密度图及词云制作 四.完整代码 五.扩展 上一篇:什么你还不知道招聘信息,小唐来教你--最新2021爬取拉勾网招聘信息(一) 下一篇:没有拉! 前 ...
- 简单爬虫,爬取天猫商品信息
前言 这是我第一次用Java来写爬虫项目,研究的也不是很透彻,所以爬虫技术的理论方面的就不说太多了. 主要还是以如何爬取商品信息为主,爬取最简单的商品信息,给出大概的思路和方法. 对于没有反爬技术的网 ...
- 什么样的人才能做互联网产品经理【爬取拉勾网招聘信息】
分析目的 在这个校招如火如荼的季节,相信大家对各种招聘网站已经再熟(yan)悉(fan)不过了,各种java开发.算法.前端.后端岗位真的是琳琅满目,而我觉得其中与我的个人兴趣和专业匹配度最高的就是产 ...
- 爬取拉勾网招聘信息(招聘岗位,公司名称,薪资等)
用爬虫框架进行爬取,框架还是feapder 代码如下: import feapder#轻量级爬虫 class LastAirSpider(feapder.AirSpider):def start_ca ...
最新文章
- 详解JavaScript数组(一)
- 我的世界光影mod怎么用_用“戏剧化”光影艺术 唤醒千年沉睡世界!
- hive(4)——元数据概述
- xdebug怎样在php中配置,教你在PHPStorm中配置Xdebug
- java 构造 statict_java学习:构造方法、static、final
- Mysql取分组中前N条记录
- lgb,xgb,gbdt,adb,RF区别与联系
- 极客c语言课程设计,c语言课程设计之实习报告共5天完整.doc
- 八数码问题的暴力求解
- ctrl z撤销后如何恢复_偏瘫后如何恢复?偏瘫家庭功能锻炼方法送给你
- 关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。...
- 产品经理必读书单(2019史上最全)
- bing 搜索引擎 无法访问 bug
- [I T]深圳唯冠与苹果达成和解协议后被指拖欠律师费遭起诉
- 文件及文件夹删除失败的解决方法
- 艾美捷-临床数量排名前20的药物靶点分析-磷酸二酯酶(PDEs)抗体
- html雪花飘落效果,使用js实现雪花飘落效果
- u盘误删的文件怎么找回?帮你轻松找回
- 手机内存跟电脑内存的区别
- ExecutorCompletionService