使用selenium动态渲染爬取拉勾网上450个java职位的信息

开始这个小项目的时候要确保你的电脑中有装上selenium以及相应的浏览器驱动,还有别忘了Mongodb数据库

我们首先打开拉勾网的官网查看下基本的页面元素

当我在搜索框中输入java的时候,url如下,当我想用下面的url进行抓取的时候,我发现事情并不简单。

我点击下一页的时候发现,url并没有变化,所以并不能用最基本的抓取方法了,而改为ajax请求进行抓取

当我查看ajax请求的时候,发现事情又不简单的了,这个分页的请求带的参数时Form data,也就是表单形式的参数,

所以,拉勾网上的ajax请求不是get请求,不能再url里面直接带参数了,而是post请求

所以用ajax的请求方式也是不能顺利的抓取的,至少对于我这个新手来说

所以我决定采取Selenium动态渲染的方式进行抓取

确定基本的抓取方式之后我们就可以开始工作啦!

首先导入必备的包

from time import sleep
from pyquery import PyQuery as pq
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
from selenium.common.exceptions import TimeoutException

创建一个lagou.py文件,声明一个LagouSpider类,并且定义它的init方法

class LagouSpider(object):
    def __init__(self):
        self.url = ‘https://www.lagou.com/‘
        self.browser = webdriver.Chrome()
        self.browser.set_window_size(1920, 1080)
        self.wait = WebDriverWait(self.browser,20)
        self.list=[]

定义搜索的方法

    def search(self):
        try:
            self.browser.get(self.url)
            actions = ActionChains(self.browser)
            actions.click()
            actions.perform()
            input = WebDriverWait(self.browser, 10).until(
                EC.presence_of_element_located((By.ID,‘search_input‘))
            )
            submit = WebDriverWait(self.browser,10).until(
                EC.element_to_be_clickable((By.ID,‘search_button‘))
            )

            sleep(2)
            input.send_keys(‘JAVA‘)
            sleep(2)
            submit.click()
        except TimeoutException:
            return self.search()

定义获取下一页的方法

    def next_page(self):
        try:
            next = WebDriverWait(self.browser,10).until(
                EC.element_to_be_clickable((By.CLASS_NAME,‘pager_next ‘))
            )
            next.click()
        except TimeoutException:
            self.next_page()

获取我要爬取的数据,包括职位,工资,职位的需求

#获取数据以及对数据进行清洗
    def get_salary(self):
        html = self.browser.page_source
        doc = pq(html)
        items = doc(‘.list_item_top‘).items()
        for item in items:
            java_dict={
                ‘position‘:item.find(‘.p_top .position_link h3‘).text(),
                ‘salary‘:item.find(‘.p_bot .li_b_l‘).text().split(‘ ‘,1)[0],
                ‘qualification‘:item.find(‘.p_bot .li_b_l‘).text().split(‘ ‘,1)[1]
            }
            print(java_dict)
            self.list.append(java_dict)

            self.save_data(java_dict)
        print(len(self.list))
        sleep(2)

        self.next_page()

最后创建一个config.py,MONGODB的配置

MONGO_URL =‘localhost‘
MONGO_DB = ‘lagou‘
MONGO_COLLECTION=‘java‘

在lagou.py文件中写上

from config import *
import pymongo

client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]

在LagouSpider中,保存到MONGODB数据库中

#保存到MONGDB中
    def save_data(self,result):
        try:
            if db[MONGO_COLLECTION].insert(result):
                print(‘存储到MONGODB成功‘)
        except Exception:
            print(‘存储到MONGODB失败‘)

创建统筹调用的方法

    def main(self):
        self.search()
        for i in range(1,31):
            self.get_salary()

最后开始爬取啦

LagouSpider().main()

查看MONGODB数据库

已经成功爬取啦

原文地址:https://www.cnblogs.com/ouyangbo/p/10930076.html

时间: 2024-11-04 11:43:49

使用selenium动态渲染爬取拉勾网上450个java职位的信息的相关文章

使用nodejs爬取拉勾苏州和上海的.NET职位信息

最近开始找工作,本人苏州,面了几家都没有结果很是伤心.在拉勾上按照城市苏州关键字.NET来搜索一共才80来个职位,再用薪水一过滤,基本上没几个能投了.再加上最近苏州的房价蹭蹭的长,房贷压力也是非常大,所以有点想往上海去发展.闲来无聊写了个小爬虫,爬了下苏州跟上海的.NET职位的信息,然后简单对比了一下. 是的小弟擅长.NET,为啥用nodejs?因为前几天有家公司给了个机会可以转nodejs,所以我是用来练手的,不过后来也泡汤了,但是还是花两晚写完了.刚学,代码丑轻喷哈! 一:如何爬取拉勾的数据

爬取拉勾部分求职信息+Bootstrap页面显示

今天在用python实现爬虫的时候,就想看一下用c#实现同样的功能到底会多出来多少code,结果写着写着干脆把页面也简单的写一个出来,方便调试, 大致流程如下: 1.分析拉勾数据 2.查找拉勾做了哪些反爬虫限制 3.抓取数据,show page 过程中用到一个HtmlAgilityPack第三方库,获取热门城市的时候使用XPath表达式抓取数据 解析JSON使用的是JSON.NET,一如既往的好用 github:https://github.com/hxd1230/XD.Job.Spider.g

动态网页爬取例子(WebCollector+selenium+phantomjs)

目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<div id="test"><span>aaa</span></div>. 这里用了WebCollector 2进行爬虫,这东东也方便,不过要支持动态关键还是要靠另外一个API -- selen

爬取拉钩全站的职位信息

爬虫学习到今天也告一段落了,利用一个项目把自己这几个月的所学的知识来做一次总结 项目所需要的知识比较全面,很适合练手, 一 程序目的 爬取拉钩全站的职位信息存入mysql和mongodb中 二 所用到的方法 一 利用selenium登录拉钩取得cookies 二 利用redis保存selenium登录拉钩取得cookies信息,维护一个cookie池 三 爬取西刺等免费IP网站,并用redis维护一个IP池 四 利用flask把cookies和ip分别映射到网页中,用requsets得到. 五

selelinum+PhantomJS 爬取拉钩网职位

使用selenium+PhantomJS爬取拉钩网职位信息,保存在csv文件至本地磁盘 拉钩网的职位页面,点击下一页,职位信息加载,但是浏览器的url的不变,说明数据不是发送get请求得到的. 我们不去寻找它的API.这里使用另一种方式:使用PhantomJS模拟浏览,通过单击页面获取下一页. 这里的PhantomJS是一个没有界面的浏览器. 1 from selenium import webdriver 2 import time 3 import random 4 5 from selen

基于selenium实现自动化爬取数据

基于selenium实现自动化爬取数据 如果想具体查看selenium自动化模块的更多功能请看我的博客测试分类中有介绍 selenium 概念:基于浏览器自动化的模块 自动化:可以通过代码指定一系列的行为动作,然后将其作用到浏览器中. pip install selenium selenium和爬虫之间的关联 1.便捷的捕获到任意形式动态加载的数据(可见即可得) 2.实现模拟登录 谷歌驱动下载:http://chromedriver.storage.googleapis.com/index.ht

【爬虫问题】爬取tv.sohu.com的页面, 提取视频相关信息

尝试解决下面的问题 问题: 爬取tv.sohu.com的页面, 提取视频相关信息,不可用爬虫框架完成 何为视频i关信息?属性有哪些? 需求: 做到最大可能的页面覆盖率 *使用httpClient 模拟获取页面HtmlText源码信息,正则出源码视频URL解析类HtmlText2URLlist.ashx. 正则式:href=\"(.*?)\" 选择重要的信息进行存储 选择合适的数据存储方式,便于后续使用 数据库字段 ID.URL.IsSuccess.Title.Isdelete.Vide

爬取赶集网二手物品下所有物品的信息

四周爬虫课第二周的练习,爬取赶集网二手物品下所有物品的信息.大致思路:1.爬取频道页url:2.爬取商品详情页url,写入mongodb,url_list表:3.从url_list表读取url,爬取商品信息,写入mongodb,p_info表 分成3个py文件:1.channel_url.py,获取频道页url:2.page_parse.py,主要是2个爬虫函数,分别完成2个数据表的写入:3.main.py,主程序文件,也就是本文件,开启多进程,完成整个工作 最后顺利完成任务,感觉现在赶集真不行

21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)

6.1.爬取第一页的职位信息 第一页职位信息 from selenium import webdriver from lxml import etree import re import time class LagouSpider(object): def __init__(self): self.driver = webdriver.Chrome() #python职位 self.url = 'https://www.lagou.com/jobs/list_python?labelWords