python爬虫之利用Selenium+Requests爬取拉勾网

一、前言

利用selenium+requests访问页面爬取拉勾网招聘信息

二、分析url

观察页面可知,页面数据属于动态加载 所以现在我们通过抓包工具,获取数据包

观察其url和参数

url="https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false"
参数:
city=%E5%8C%97%E4%BA%AC  ==》城市
first=true  ==》无用
pn=1  ==》页数
kd=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90  ==》商品关键词

所以我们要想实现全站爬取,需要有city和页数

三、获取所有城市和页数

我们打开拉勾网,观察后发现,他的数据并不是完全展示的,比如说 在城市筛选选择全国 仅仅只显示30页 但总页数是远远大于30页的;我又选择北京发现是30页又选择北京下的海淀区又是30页,可能我们无法把数据全部的爬取,但我们可以尽可能的将数据多的爬取


我们为了获取全站数据,必然离不开的有两个参数 一个是城市一个是页数,所以我们利用selenium自动化去获取所有城市和对应页数

def City_Page(self):
    City_Page={}
    url="https://www.lagou.com/jobs/allCity.html?keyword=%s&px=default&companyNum=0&isCompanySelected=false&labelWords="%(self.keyword)
    self.bro.get(url=url)
    sleep(30)
    print("开始获取城市及其最大页数")
    if "验证系统" in self.bro.page_source:
        sleep(40)
    html = etree.HTML(self.bro.page_source)
    city_urls = html.xpath('//table[@class="word_list"]//li/input/@value')
    for city_url in city_urls:
        try:
            self.bro.get(city_url)
            if "验证系统" in self.bro.page_source:
                sleep(40)
            city=self.bro.find_element_by_xpath('//a[@class="current_city current"]').text
            page=self.bro.find_element_by_xpath('//span[@class="span totalNum"]').text
            City_Page[city]=page
            sleep(0.5)
        except:
            pass
    self.bro.quit()
    data = json.dumps(City_Page)
    with open("city_page.json", 'w', encoding="utf-8")as f:
        f.write(data)
    return City_Page

四、生成params参数

我们有了每个城市对应的最大页数,就可以生成访问页面所需的参数

def Params_List(self):
    with open("city_page.json", "r")as f:
        data = json.loads(f.read())
    Params_List = []
    for a, b in zip(data.keys(), data.values()):
        for i in range(1, int(b) + 1):
            params = {
                'city': a,
                'pn': i,
                'kd': self.keyword
            }
            Params_List.append(params)
    return Params_List

五、获取数据

最后我们可以通过添加请求头和使用params url来访问页面获取数据

def Parse_Data(self,params):
    url = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"
    header={
        'referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
        'cookie':''
    }
    try:
        text = requests.get(url=url, headers=header, params=params).text
        if "频繁" in text:
            print("操作频繁,已被发现 当前为第%d个params"%(i))
        data=json.loads(text)
        result=data["content"]["positionResult"]["result"]
        for res in result:
            with open(".//lagou1.csv", "a",encoding="utf-8") as f:
                writer = csv.DictWriter(f, res.keys())
                writer.writerow(res)
        sleep(1)
    except Exception as e:
        print(e)
        pass

六、总结

尽管数据只显示前30页,但数据还是未完全获取

在利用selenium获取城市最大页数时 应手动登录拉勾网,并且其在访问过程中可能会出现验证系统需要验证

利用requests访问页面获取数据时 尽量sleep时间长一点,操作频繁会封IP

到此这篇关于python爬虫之利用Selenium+Requests爬取拉勾网的文章就介绍到这了,更多相关Selenium+Requests爬取拉勾网内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python+selenium小米商城红米K40手机自动抢购的示例代码

    使用环境 1.python3 2.selenium selenium使用简述 1.安装selenium pip install selenium 2.安装ChromeDriver 下载地址:http://chromedriver.storage.googleapis.com/index.html 注意:下载的ChromeDriver需要与Chrome版本一致. 1)Chrome版本查看: 2)ChromeDriver对应版本下载: 3)ChromeDriver下载后解压到任意文件夹,建议可以放到

  • python selenium实现智联招聘数据爬取

    一.主要目的 最近在玩Python网络爬虫,然后接触到了selenium这个模块,就捉摸着搞点有意思的,顺便记录一下自己的学习过程. 二.前期准备 操作系统:windows10 浏览器:谷歌浏览器(Google Chrome) 浏览器驱动:chromedriver.exe (我的版本->89.0.4389.128 ) 程序中我使用的模块 import csv import os import re import json import time import requests from sele

  • Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能

    测试结果: 整个买票流程可以再快一点,不过为了稳定起见,有些地方等待了一些时间 完整程序,拿去可用 整个程序分了三个模块:购票模块(主体).验证码识别模块.余票查询模块 购票模块: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.commo

  • 使用Selenium实现微博爬虫(预登录、展开全文、翻页)

    前言 在CSDN发的第一篇文章,时隔两年,终于实现了爬微博的自由!本文可以解决微博预登录.识别"展开全文"并爬取完整数据.翻页设置等问题.由于刚接触爬虫,有部分术语可能用的不正确,请大家多指正! 一.区分动态爬虫和静态爬虫 1.静态网页 静态网页是纯粹的HTML,没有后台数据库,不含程序,不可交互,体量较少,加载速度快.静态网页的爬取只需四个步骤:发送请求.获取相应内容.解析内容及保存数据. 2.动态网页 动态网页上的数据会随时间及用户交互发生变化,因此数据不会直接呈现在网页源代码中,

  • 基于python requests selenium爬取excel vba过程解析

    目的:基于办公与互联网隔离,自带的office软件没有带本地帮助工具,因此在写vba程序时比较不方便(后来发现07有自带,心中吐血,瞎折腾些什么).所以想到通过爬虫在官方摘录下来作为参考. 目标网站:https://docs.microsoft.com/zh-cn/office/vba/api/overview/ 所使工具: python3.7,requests.selenium库 前端方面:使用了jquery.jstree(用于方便的制作无限层级菜单 设计思路: 1.分析目标页面,可分出两部分

  • Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

    在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException),一般可以从以下几个方面着手解决: 1.Frame/Iframe原因定位不到元素: 这个是最常见的原因,首先要理解下frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位. 解决方案: 如果iframe

  • 如何使用selenium和requests组合实现登录页面

    这篇文章主要介绍了如何使用selenium和requests组合实现登录页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.在这里selenium的作用 (1)模拟的登录. (2)获取登录成功之后的cookies 代码 def start_login(self): chrome_options = Options() # 禁止图片加载,禁止推送通知 prefs = { "profile.default_content_setting_val

  • python爬虫之利用Selenium+Requests爬取拉勾网

    一.前言 利用selenium+requests访问页面爬取拉勾网招聘信息 二.分析url 观察页面可知,页面数据属于动态加载 所以现在我们通过抓包工具,获取数据包 观察其url和参数 url="https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false" 参数: city=%E5%8C%97%E4%BA%AC ==>城市 first=true ==>无用 pn=

  • python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解

    这篇博客是自己<数据挖掘与分析>课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,最后通过实例爬取作者的个人博客网站.希望这篇基础文章对您有所帮助,如果文章中存在错误或不足之处,还请海涵.真的太忙了,太长时间没有写博客了,抱歉~ 一.正则表达式 正则表达式(Regular Expression,简称Regex或RE)又称为正规表示法或常规表示法,常常用来检索.替换那些符合某个模式的文本,它首先设定好了一些特殊的字及字符组合,通过组合的&

  • python爬虫之利用selenium+opencv识别滑动验证并模拟登陆知乎功能

    滑动验证距离 分别获取验证码背景图和滑块图两张照片,然后利用opencv库,通过高斯模糊和Canny算法进行处理,然后通过matchTemplate方法进行两张图的匹配,获得滑动距离.需要注意的是,知乎验证码在进行操作的时候,需要在原有基础上再向右偏移10px距离 def get_distance(self, bg_img_path='./bg.png', slider_img_path='./slider.png'): """获取滑块移动距离""&quo

  • Python爬虫实现的根据分类爬取豆瓣电影信息功能示例

    本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口: if __name__ == '__main__': main() #! /usr/bin/python3 # -*- coding:utf-8 -*- # author:Sirius.Zhao import json from urllib.parse import quote from urllib.request import urlopen from urllib.reque

  • Python爬虫入门教程01之爬取豆瓣Top电影

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel csv 安装Python并添加到环境变量,pip安装需要的相关模块即可. 爬虫基本思路 一.明确需求 爬取豆瓣Top250排行电影信息 电影名字 导演.主演 年份.国家.类型 评分.评价人数 电影简介 二.发送请求 Python中的大量开源的模块使得编码变的特别简单,我们写爬虫第一个要了解的模

  • Python爬虫实战之使用Scrapy爬取豆瓣图片

    使用Scrapy爬取豆瓣某影星的所有个人图片 以莫妮卡·贝鲁奇为例 1.首先我们在命令行进入到我们要创建的目录,输入 scrapy startproject banciyuan 创建scrapy项目 创建的项目结构如下 2.为了方便使用pycharm执行scrapy项目,新建main.py from scrapy import cmdline cmdline.execute("scrapy crawl banciyuan".split()) 再edit configuration 然后

  • Python爬虫实战之虎牙视频爬取附源码

    目录 知识点 开发环境 分析目标url 开始代码 最开始还是线导入所需模块 数据请求 获取视频标题以及url地址 获取视频id 保存数据 调用函数 运行代码,得到数据 知识点 爬虫基本流程 re正则表达式简单使用 requests json数据解析方法 视频数据保存 开发环境 Python 3.8 Pycharm 爬虫基本思路流程: (重点) [无论任何网站 任何数据内容 都是按照这个流程去分析] 1.确定需求 (爬取的内容是什么东西?) 都通过开发者工具进行抓包分析 分析视频播放url地址 是

  • python爬虫之利用selenium模块自动登录CSDN

    一.页面分析 CSDN登录页面如下图 二.引入selenium模块及驱动 2.1 并将安装好的Chromedriver.exe引入到代码中 # -*- coding:utf-8 -*- from selenium import webdriver import os import time #引入chromedriver.exe chromedriver="C:/Users/lex/AppData/Local/Google/Chrome/Application/chromedriver.exe&

  • python爬虫框架scrapy实战之爬取京东商城进阶篇

    前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧. 代码详解 1.首先应该构造请求,这里使用scrapy.Request,这个方法默认调用的是start_urls构造请求,如果要改变默认的请求,那么必须重载该方法,这个方法的返回值必须是一个可迭代的对象,一般是用yield返回. 代码如下: def start_requests(self): fo

  • python爬虫之教你如何爬取地理数据

    一.shapely模块 1.shapely shapely是python中开源的针对空间几何进行处理的模块,支持点.线.面等基本几何对象类型以及相关空间操作. 2.point→Point类 curve→LineString和LinearRing类: surface→Polygon类 集合方法分别对应MultiPoint.MultiLineString.MultiPolygon 3.导入所需模块 # 导入所需模块 from shapely import geometry as geo from s

随机推荐