2.简单爬虫————爬取拉勾网招聘信息(一)

python爬虫之爬取招聘岗位信息 将GitHub上的爬虫项目进行了优化,优化一:由只能获取单一岗位的数据优化成可获取所有的岗位数据(项目里只进行了2个岗位展示,有需要的话可以进行多个岗位数据爬取);优化二:将项目的数据由单一的存储在数据文件里面到可选择将爬取数据存储到MySql数据库中并从数据库中读取数据,以字典的形式存储再进行可视化展示。 阅读详情

该文章仅供学习,如有错误,欢迎指出

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 results

    def _build_request(self, rule, link):
        r = Request(url=link.url, callback=self._response_downloaded)
        r.meta.update(rule=rule, link_text=link.text)
        return r

    def _requests_to_follow(self, response):
        if not isinstance(response, HtmlResponse):
            return
        seen = 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_item

        if follow and self._follow_links:
            for request_or_item in self._requests_to_follow(response):
                yield request_or_item

    def _compile_rules(self):
        def get_method(method):
            if callable(method):
                return method
            elif 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)

    @classmethod
    def 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 spider

    def 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_item

        if 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):
            return
        seen = 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_extractor
        self.callback = callback
        self.cb_kwargs = cb_kwargs or {}
        self.process_links = process_links
        self.process_request = process_request
        if follow is None:
            self.follow = False if callback else True
        else:
            self.follow = follow

对模板的理解有些不足,之后会慢慢补

python爬虫之爬取拉勾网 这次要爬取拉勾网,拉勾网的反爬做的还是很不错的啊,因为目标网站是Ajax交互的我一开始是直接分析json接口来爬取的,但是真的很麻烦,请求头一旦出点问题就给识别出来了后续我就改了一下方法用selenium来模拟浏览器去获取 招聘求职信息-招聘网站-人才网-拉勾招聘 (lagou.com)https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=先把前面代码写好 思路嘛大概就是 获取主页的源... 阅读详情

相关推荐

基于Python的拉勾网Python工程师招聘信息的爬取和处理分析

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

舒小羽的博客 6002

基于Python的拉勾网数据爬取与分析 计算机毕设源码97476

本系统采用的是 Python 语言,使用Flask框架开发,MySOL为数据库。功能包括公告管理,系统用户(管理员,注册用户),轮播图,资源管理(招聘资讯,资讯分类),模块管理(所在城市,学历要求,工作年限,招聘信息)等。有了本系统之后,可以在一定程度上解决招聘数据分析的专业性问题,明确当前招聘行业的状况,以及辅助分析未来招聘行业发展的趋势。本论文的研究为培养学生的数据处理能力和可视化分析能力奠定了基础......

weixin_ZYKJ985的博客 695

Python爬取拉勾网招聘信息并可视化分析

需求: 1:获取指定岗位的招聘信息 2:对公司地区,公司待遇,学历情况,工作经验进行简单分析并可视化展示 可视化分析: 公司地区:柱状图,地图 公司待遇:云图 公司-学历情况:饼图 公司工作经验:饼图 模块: request:网络请求 re:正则匹配数据 pyecharts:可视化工具 自定义工具类:...

xiamoyanyulrq的博客 4万+

Python应用-Scrapy爬虫之拉勾网招聘数据分析(4,5关)

本关任务:使用Pandas结合Matplotlib对数据进行可视化展示(柱状图)。

c_grass_c的博客 4463

Python 爬虫实战案例 - 获取拉勾网招聘职位信息

本文通过详细步骤展示了如何使用Python爬取拉勾网的职位招聘信息。我们使用了requests、BeautifulSoup、csv等常见库完成拉勾网数据的抓取、解析与存储,并且介绍了如何处理反爬虫机制、分页问题以及数据存储。在享受爬虫技术带来便利的同时,务必铭记要遵循网站规则。合理设置爬取频率,模拟真实用户行为,不恶意冲击服务器;尊重网站的 robots.txt 协议,不越界访问禁止区域。只有如此,才能确保爬虫技术在合法合规的轨道上稳健前行,实现数据获取与网站运营的和谐共生。

m0_54850303的博客 1840

python爬虫爬取拉勾网职业信息

先放成果 招聘关键字词云 公司关键字词云 代码git地址:https://github.com/fengyuwusong/lagou-scrapy 目标 抓取拉钩关于java工程师的招聘信息并制作成词云图。 研究目标网站 打开拉钩网可以发现目标url为:https://www.lagou.com/zhaopin/Java/2/?filterOption=2 ,这通过

风雨雾凇的博客 7633

爬虫实战(三) 用Python爬取拉勾网

最近博主面临着选方向的困难(唉,选择困难症患者 >﹏<),所以希望了解一下目前不同岗位的就业前景 这时,就不妨写个小爬虫,爬取一下拉勾网的职位数据,并用图形化的方法展示出来,一目了然

半虹小站 3510

python爬虫 senlenium爬取拉勾网招聘数据

python爬虫,利用senlenium实现,输入任意关键字,比如 python 数据分析,点击搜索,得到的有关岗位信息,将这些数据爬取下来保存到Excel。保存下来后进行数据查看。

叶庭云 成为自己的光 3337

爬虫实例二:爬取拉勾网招聘信息

爬虫,从基础到进阶(二) 如果是第一次看本教程的同学,可以先从一开始: 爬虫,从基础到进阶(一) 欢迎关注微信公众号:极简XksA 微信账号:xksnh888 转载请先联系微信号:zs820553471 交流学习 一、学习开始前需安装模块 pip install requests pip install cvs pip install pandas ...

简说Python的博客 1万+

Python爬虫实例——scrapy框架爬取拉勾网招聘信息

主要介绍了Python爬虫实例——scrapy框架爬取拉勾网招聘信息的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

python爬虫之爬取拉勾网职位信息

import json import time import requests import csv # 1. 创建文件对象 f = open('lgposition.csv', 'w', encoding='utf-8', newline='') # 2. 基于文件对象构建 csv写入对象 csv_writer = csv.writer(f) # 3. 构建列表头 csv_writer.writerow( ["公司", "职位名称", "公司简称", "公司规模", "公司行业", "融资", "福利", "职位类型", "第二职位", "第三职位", "技能

(python爬虫)拉勾网招聘信息爬取

拉勾网招聘岗位爬虫项目 本次爬取数据为python岗位信息,并非用于商业渠道的,只是新手上路练练手,代码如有问题,请多多指教,谢谢。 项目介绍: 爬取网站:拉勾网 URL:https://www.lagou.com/ 爬取关键词:python 技术路线:selenium+bs4+time+re+xlwt 爬取时间:2020.08.11 作者:YRH 1.导入库 from selenium import webdriver from bs4 import BeautifulSoup import time i

weixin_45066966的博客 4761

Plaxis软件简介及 Plaxis Python API环境搭建、自动化建模、Python全自动实现、高级案例分析

本次课程主要针对岩土工程中的各种问题(塑性、渗流、固结、动力、稳定安全、热力TM),用四天时间,教大家如何一步一步地搭建自己的Plaxis模型,包括Plaxis Python API的连接与配置、外部Python编译器的使用、Python命令流自动建模过程、Python远程脚本读取输出结果等,其中的Python建模模块尽可能做到让学员零基础开始,通过提供标准命令流库,使用搭积木、摆乐高的形式模块化进行,加强学员的易上手、可操作性。(2)钻孔的建立、土层的建立、土层属性、水力条件及初始条件、导入土层。

CCfz566的博客 1463

Python获取拉勾网招聘信息(可视化展示)

1、获取拉勾网招聘信息 首先要明确拉勾网的招聘信息存储网页是post形式的,所以必须填写from_data信息。我们这里填的是from_data = {‘first’:‘true’, ‘pn’:‘1’, ‘kd’:‘设计’},其中pn代表当前页码,kd就是我们搜索的职位关键词。 第二就是记得要用Session 获取动态cookies,否则爬下来的数据空空如也,还容易被封IP封号。 ...

Mr_qing的博客 2983

手把手教你用Ubuntu 22.04的附加驱动工具安装NVIDIA显卡驱动(含常见错误修复)

本文详细介绍了在Ubuntu 22.04系统上,如何通过图形化的“附加驱动”工具安全、便捷地安装NVIDIA显卡驱动。内容涵盖从准备工作、禁用默认的nouveau驱动、图形界面安装实操,到安装后的验证(如使用nvidia-smi命令),并提供了安装失败黑屏、亮度调节失效等常见问题的深度解决方案,帮助用户彻底搞定驱动安装难题。

weixin_29248653的博客 602

【COMSOL】将一个面上数据导出CSV或txt格式的方法

在COMSOL中参数化扫描后,把一个面上或体里的数据按照CSV或TXT格式导出的方法。

dave496206的博客 2991

爬虫练习-爬取拉勾网招聘信息(2020.2.2)

应对AJAX动态加载,并应用表单的交互技术,爬取爬取拉勾网招聘信息,解析网页返回的json数据,并将爬取的数据存储于MongoDB数据库中。

莫莫先生的博客 6385

从扇束到平行束:等角重排算法在CT重建中的核心原理与MATLAB实践

本文深入解析了CT图像重建中等角扇束重排算法的核心原理与MATLAB实现。通过将实际采集的扇束投影数据,利用几何映射和两次关键插值,转换为适用于经典滤波反投影算法的平行束数据,打通了高效重建的关键路径。文章结合Shepp-Logan模型仿真,提供了完整的MATLAB代码实践,并分析了源-物距、采样率等关键参数对重建质量的影响。

cnn8visionary的博客 647

利用Python爬取拉勾网招聘信息

文章目录第一步:导入工具库第二步:爬取数据第三步:解析数据第四步:保存数据完整代码结果 第一步:导入工具库 import requests,json,csv,time 第二步:爬取数据 因为拉勾使用异步加载方式对数据进行了封装,所以不能直接用requests库的get或post方法,而是使用session会话。 构建session会话 session = requests.session() 构建请求头 headers = { 'referer' : 'https://www.lagou.co

lz你ps的博客 2512

STM32实战:ADXL345传感器驱动与数据采集全解析(IIC/SPI双模式适配)

本文详细解析了STM32驱动ADXL345传感器的全流程,包括IIC和SPI双模式适配、硬件连接、寄存器配置及数据采集处理。通过实战代码示例和常见问题排查指南,帮助开发者快速实现高精度加速度数据采集,适用于运动检测、姿态识别等多种嵌入式应用场景。

weixin_29171087的博客 313

解锁SPWM电压利用率:三次谐波注入幅值的黄金分割点

本文深入探讨了SPWM电压利用率的提升方法,重点介绍了三次谐波注入技术及其黄金分割点(1/6比例)。通过数学推导和工程实践,揭示了如何通过特定幅值的三次谐波注入将电压利用率从86.6%提升至115%,与SVPWM相当。文章还提供了实验室调试流程和DSP实现代码,帮助工程师优化逆变器设计。

weixin_30729609的博客 916

用scrapy框架爬取拉勾网招聘信息

本文实例为爬取拉勾网上的如职位名, 薪资, 公司名称相关python的职位信息。 分析思路 分析查询结果页 在拉勾网搜索框中搜索'python'关键字, 在浏览器地址栏可以看到搜索结果页的url为: 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=', 尝试将?后的参数删除, 发现访问结果相同. 打开Chrome网页调试工具(F12), 分析每条搜索结果(即每个职位)在html中

m0_49079037的博客 2691

手把手完整实现STM32+ESP8266+MQTT+阿里云服务器+手机APP应用——第一节—阿里云物联网平台配置+IoTStudio界面绘制+MQTT.fx模拟MQTT客户端与使用AT命令发布订阅消息

通过MQTT.fx模拟连接以及通过CH340串口连接ESP8266发送AT命令,实现阿里云物联网平台发送数据同时接收数据,IOT studio界面显示数据。具体来说:使用ESP8266(本系列使用了ESP8266-ESP01/01S以及正点原子的ATK-ESP8266) 来连接网络,获取设备数据发送到阿里云物联网平台并显示数据,通过IOT studio界面显示数据并发送命令控制设备。本系列使用的主控芯片是STM32F103系列,当然也可以使用其他系列单片机都可以实现,思路都是一样的。同时本系列有手机APP源

嵌入式阿齐Archie 5万+

Python实战:使用DrissionPage库爬取拉勾网职位信息

DrissionPage 是一个基于 python 的网页自动化工具。它既能控制浏览器,也能收发数据包,还能把两者合而为一。可兼顾浏览器自动化的便利性和 requests 的高效率。它功能强大,内置无数人性化设计和便捷功能。它的语法简洁而优雅,代码量少,对新手友好。用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。

stormhou的博客 4584

QGis二次开发 —— 5.2、基于qgis搭建离线地图服务并开发雷达扫描、无人机飞行跟踪等(附:源码及工程)

QGis二次开发 —— 5.2、基于qgis搭建离线地图服务并开发雷达扫描、无人机飞行跟踪等(附:源码及工程)

224

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 1.简单爬虫————爬取古诗网
下一篇: 3.简单爬虫————爬取拉勾网招聘信息(二)
Alpaca_h
博客等级 码龄9年 0粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值