selenium实现zhilian招聘的爬取

2023-10-26

一.主要目的:

最近在玩Python网络爬虫,然后接触到了selenium这个模块,就捉摸着搞点有意思的,顺便记录一下自己的学习过程。

二.前期准备:

  • 操作系统:windows10

  • 浏览器:谷歌浏览器(Google Chrome)

  • 浏览器驱动:chromedriver.exe (我的版本—>89.0.4389.128 )

    • 浏览器驱动需要根据你自己当前浏览器的版本来进行下载
    • 链接 http://chromedriver.storage.googleapis.com/index.html
  • 程序中我使用的模块

    • import csv
      import os
      import re
      import json
      import time
      
      import requests
      from selenium.webdriver import Chrome
      from selenium.webdriver.remote.webelement import WebElement
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import ui
      from selenium.webdriver.support import expected_conditions
      from lxml import etree
      
      chrome = Chrome(executable_path='chromedriver')  
      
    • 用的的第三方包均可用 pip install 进行安装

    • 上面代码中的最后一行表示创建一个浏览器对象

三.思路分析:

  1. 大致看了一下网站主页,需要先登录后才能进行信息的获取,所以只能先模拟登录。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

进入登录页面的时候是显示二维码登录,我们不用这个,因为确实不怎么方便,我们通过模拟点击页面上的按钮进入到账号、密码登录的页面输入进行登录。下面是如何驱动浏览器进行上述的一系列操作⬇⬇⬇⬇⬇⬇

# 获取登录页面
chrome.get(url)
# 找出账号密码登录的页面
chrome.find_element_by_class_name('zppp-panel-qrcode-bar__triangle').click()
chrome.find_element_by_xpath('//div[@class="zppp-panel-normal__inner"]/ul/li[2]').click()
# 找到账户密码的交互接口并进行输入
user_name = chrome.find_elements_by_xpath('//div[@class="zppp-input__container"]/input')[0]
pass_word = chrome.find_elements_by_xpath('//div[@class="zppp-input__container"]/input')[1]
# 进行需要登录的账号密码输入
user_name.send_keys('**********')  
pass_word.send_keys('***********')
# 输入完成后点击登录
chrome.find_element_by_class_name('zppp-submit').click()

# 此处手动实现滑块验证
# 动动你的小鼠标

  1. 登陆后大致看了一下主页决定先从城市开始爬,在它的原文件中分析出它的位置,如图↓

在这里插入图片描述

我用的是requests请求获取到网页原文件,再使用正则匹配到我们需要的内容(就是上图中那一坨红色的↑),之后再进行一系列的解析获取到每个城市与其对应的url ⬇⬇⬇⬇⬇⬇

resp = requests.get(url, headers=headers)
    if resp.status_code == 200:
        html = resp.text
        json_data = re.search(r'<script>__INITIAL_STATE__=(.*?)</script>', html).groups()[0]
        data = json.loads(json_data)
        cityMapList = data['cityList']['cityMapList']  # dict
        for letter, citys in cityMapList.items():
            # print(f'-----{letter}-------')
            for city in citys:  # citys 是个列表,里面嵌套的字典
                '''
                {
                    'name': '鞍山',
                    'url': '//www.zhaopin.com/anshan/',
                    'code': '601',
                    'pinyin': 'anshan'
               }
                '''
                city_name = city['name']
                city_url = 'https:' + city['url']

此处我们获取的是所有的城市和它url,如果都要进行爬取的话数据量略大,因此我们可以筛选出需要爬取的城市减轻工作量,反正爬取城市我们想怎么改就怎么改哈哈哈哈哈。

  1. 接下来我们就可以进行工作的查找了,既然我们用的是Python来爬取的,那就查询Python相关的工作吧。
    在这里插入图片描述

    首先还是要找到输入搜索信息的框框并找出它的接口,然后进行输入(这里输入的是Python),输入完成后找到右边的搜索按钮(就是那个放大镜)进行点击操作,下面是模拟浏览器操作的代码实现⬇⬇⬇⬇⬇

    # 根据class_name 查询WebElement找出输入的位置
    input_seek: WebElement = chrome.find_element_by_class_name('zp-search__input')
    input_seek.send_keys('Python')  # 输入Python
    click: WebElement = 
        # 找出搜索	按钮并点击
        chrome.find_element_by_xpath('//div[@class="zp-search__common"]//a')  
    click.click()
    
    chrome.switch_to.window(chrome.window_handles[1])
    

    这里就有一个需要注意的地方了:在输入Python点击搜索按钮后会弹出一个新的窗口,而驱动浏览器的 程序还在第一个窗口,因此需要使用 swiitch_to_window(chrome.window_handles[n]) --<n表示目标窗口的 位置,最开始的第一个窗口是0> 方法进行窗口的切换。

    1. 数据的解析和提取

在这里插入图片描述

很明显可以看出需要的信息都在 class="positionlist "下,进一步分析可知数据都在 a标签下,接下来就可以使用Xpath进行数据的提取⬇⬇⬇⬇⬇

root = etree.HTML(html)
    divs = root.xpath('//div[@class="positionlist"]')  # element对象
    for div in divs:   
        # 岗位     # 里面对应的是一个个列表
        position = div.xpath('.//a//div[@class="iteminfo__line1__jobname"]/span[1]')  
         # 公司
        company = div.xpath('//a//div[@class="iteminfo__line1__compname"]/span/text()') 
        # 薪资
        money = div.xpath('.//a//div[@class="iteminfo__line2__jobdesc"]/p/text()')  
         # 位置
        city = div.xpath('//a//div[@class="iteminfo__line2__jobdesc"]/ul/li[1]/text()') 
        # 经验
        experience = 				              div.xpath('.//a//div[@class="iteminfo__line2__jobdesc"]/ul/li[2]/text()') 
        # 学历
        education =    div.xpath('.//a//div[@class="iteminfo__line2__jobdesc"]/ul/li[3]/text()')  
         # 规模
        scale = div.xpath('.//a//div[@class="iteminfo__line2__compdesc"]/span[1]/text()') 
         # 人数
        people = div.xpath('.//a//div[@class="iteminfo__line2__compdesc"]/span[2]/text()') 
  1. 获取下一页
    在这里插入图片描述

    找到下一页按钮并模拟浏览器进行点击,获取到每一页所有的数据。

四.具体源代码

import csv
import os
import re
import json
import time

import requests
from selenium.webdriver import Chrome
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.common.by import By
from selenium.webdriver.support import ui
from selenium.webdriver.support import expected_conditions
from lxml import etree

chrome = Chrome(executable_path='chromedriver')


# 模拟登录
def login(url):
    # 获取登录页面
    chrome.get(url)
    # 找出账号密码登录的页面
    chrome.find_element_by_class_name('zppp-panel-qrcode-bar__triangle').click()
    chrome.find_element_by_xpath('//div[@class="zppp-panel-normal__inner"]/ul/li[2]').click()
    # 找到账户密码的交互接口并进行输入
    user_name = chrome.find_elements_by_xpath('//div[@class="zppp-input__container"]/input')[0]
    pass_word = chrome.find_elements_by_xpath('//div[@class="zppp-input__container"]/input')[1]
    # 此处输入登录智联招聘的账号密码
    user_name.send_keys('***********')
    pass_word.send_keys('**********')
    # 输入完成后点击登录
    chrome.find_element_by_class_name('zppp-submit').click()

    # 此处手动实现滑块验证
    # 动动手指滑一划完成登录
    time.sleep(10)

    get_allcity('https://www.zhaopin.com/citymap')
    # 在登录状态下进行所有城市信息的获取


def get_allcity(url):
    resp = requests.get(url, headers=headers)
    if resp.status_code == 200:
        html = resp.text
        json_data = re.search(r'<script>__INITIAL_STATE__=(.*?)</script>', html).groups()[0]
        data = json.loads(json_data)
        cityMapList = data['cityList']['cityMapList']  # dict
        for letter, citys in cityMapList.items():
            # print(f'-----{letter}-------')
            for city in citys:  # citys 是个列表,里面嵌套的字典
                '''
                {
                    'name': '鞍山',
                    'url': '//www.zhaopin.com/anshan/',
                    'code': '601',
                    'pinyin': 'anshan'
               }
                '''
                city_name = city['name']
                city_url = 'https:' + city['url']

                # 筛选城市
                query_citys = ('成都')
                if city_name in query_citys:
                    print(f'正在获取{city_name}的信息')
                    get_city_job(city_url)
                    time.sleep(3)
                else:
                    # print(f'{city_name} 不在搜索范围内!')
                    pass
    else:
        print('网页获取失败')


def get_city_job(url):
    chrome.get(url)  # 打开城市信息
    # 根据class_name 查询WebElement找出输入的位置
    input_seek: WebElement = chrome.find_element_by_class_name('zp-search__input')
    input_seek.send_keys('Python')  # 输入Python
    click: WebElement = chrome.find_element_by_xpath('//div[@class="zp-search__common"]//a')  # 找出搜索按钮并点击
    click.click()

    # 切换到第二个页面
    chrome.switch_to.window(chrome.window_handles[1])

    time.sleep(1)

    time.sleep(1)
    # 等待class_name为“sou-main__list” div元素出现
    ui.WebDriverWait(chrome, 30).until(
        expected_conditions.visibility_of_all_elements_located((By.CLASS_NAME, 'sou-main__list')),
        '查找的元素一直没有出现'
    )

    # 判断当前查询结果是否不存在
    no_content = chrome.find_elements_by_class_name('positionlist')
    if not no_content:
        print('当前城市未查找到Python岗位')
    else:
        # 提取查找结果
        parse(chrome.page_source)


def parse(html):
    root = etree.HTML(html)
    divs = root.xpath('//div[@class="positionlist"]')  # element对象
    items = {}
    for div in divs:
        # 岗位
        position = div.xpath('.//a//div[@class="iteminfo__line1__jobname"]/span[1]')  
         # 公司
        company = div.xpath('//a//div[@class="iteminfo__line1__compname"]/span/text()') 
        # 薪资
        money = div.xpath('.//a//div[@class="iteminfo__line2__jobdesc"]/p/text()')  
        # 位置
        city = div.xpath('//a//div[@class="iteminfo__line2__jobdesc"]/ul/li[1]/text()') 
        # 经验
        experience =  div.xpath('.//a//div[@class="iteminfo__line2__jobdesc"]/ul/li[2]/text()')  
        # 学历
        education =  div.xpath('.//a//div[@class="iteminfo__line2__jobdesc"]/ul/li[3]/text()')  
         # 规模
        scale = div.xpath('.//a//div[@class="iteminfo__line2__compdesc"]/span[1]/text()') 
         # 人数
        people = div.xpath('.//a//div[@class="iteminfo__line2__compdesc"]/span[2]/text()') 
        for position_, company_, money_, city_, experience_, education_, scale_, people_ in zip(position, company,
                                                                                                money, city, experience,
                                                                                                education, scale,
                                                                                                people):
            # title="python爬虫工程师" 获取它的title属性值
            string = position_.attrib.get('title')  
            items['position'] = string
            items['company'] = company_
            items['money'] = money_.strip()
            items['city'] = city_
            items['experience'] = experience_
            items['education'] = education_
            items['scale'] = scale_
            items['people'] = people_
            itempipeline(items)

    # 获取下一页
    next_page()


def itempipeline(items):
    has_header = os.path.exists(save_csv)  # 文件头
    with open(save_csv, 'a', encoding='utf8') as file:
        writer = csv.DictWriter(file, fieldnames=items.keys())
        if not has_header:
            writer.writeheader()  # 写入文件头
        writer.writerow(items)

def next_page():
    # 找到下一页按钮
    time.sleep(0.5)
    button = chrome.find_elements_by_xpath('//div[@class="soupager"]/button[@class="btn soupager__btn"]')
    if not button:
        print(f'获取完毕,请在 {save_csv} 里查看!!')
        exit()
    else:
        button[0].click()  # 点击下一页
        time.sleep(1)
        parse(chrome.page_source)


if __name__ == '__main__':
    n = 0
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3823.400 QQBrowser/10.7.4307.400',
        'Cookie': 'aQQ_ajkguid=B4D4C2CC-2F46-D252-59D7-83356256A4DC; id58=e87rkGBclxRq9+GOJC4CAg==; _ga=GA1.2.2103255298.1616680725; 58tj_uuid=4b56b6bf-99a3-4dd5-83cf-4db8f2093fcd; wmda_uuid=0f89f6f294d0f974a4e7400c1095354c; wmda_new_uuid=1; wmda_visited_projects=%3B6289197098934; als=0; cmctid=102; ctid=15; sessid=E454865C-BA2D-040D-1158-5E1357DA84BA; twe=2; isp=true; _gid=GA1.2.1192525458.1617078804; new_uv=4; obtain_by=2; xxzl_cid=184e09dc30c74089a533faf230f39099; xzuid=7763438f-82bc-4565-9fe8-c7a4e036c3ee'
    }
    save_csv = 'chengdu-python.csv'
    login(
        'https://passport.zhaopin.com/login?bkUrl=%2F%2Fi.zhaopin.com%2Fblank%3Fhttps%3A%2F%2Fwww.zhaopin.com%2Fbeijing%2F')

五.部分成果展示

在这里插入图片描述

六.总结

个人认为智联的反爬还是比较友好的,为什么呢?因为之前在测试程序的时候模拟登录了好几十次,都是在短时间内,而且一开始比较担心IP被封但是最后也没出什么问题。还有就是selenium受网速影响比较大,等待时间设置过长吧,会影响程序速度,但是时间过短吧又会损数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium实现zhilian招聘的爬取 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js

随机推荐

  • 防抖 / 节流

    防抖 新建debounce js文件 export const debounce function fun delay let timer return function let that this let args arguments i
  • 7月9日王者荣耀服务器维护,《王者荣耀》7月9日体验服停机更新公告

    亲爱的召唤师 为了增加版本的稳定性 我们计划在2021年7月9日16 00 18 00对 王者荣耀 体验服进行停机维护 更新时间 7月9日16 00 18 00 15 30关闭PVP 更新方式 停机更新 更新范围 王者荣耀修炼之地体验服 下
  • 在iPhone/iPad端运行DebianLinux系统【iSH-AOK】

    最后一次更新 2023 4 08 请勿利用文章内的相关技术从事非法测试 由于传播 利用此文所提供的信息而造成的任何直接或者间接的后果及损失 均由使用者本人负责 作者不为此承担任何责任 文章目录 1 前言 2 简介 2 2iSH AOK介绍与
  • es批量修改数组动态增加并去重

    es创建测试的index和type 对应mysql的数据库和表 PUT uniq test idx1 mappings uniq test properties comId type long customerName type keywo
  • Your branch is ahead of 'origin/master' by 2 commits.

    遇到这种问题 表示在你之前已经有2个commit而没有push到远程分支上 所以需要先git push origin 将本地分支提到远程仓库 也可以直接git reset hard HEAD x解决 这里的x表示的就是在这之前已经有多少次的
  • 分享一些你觉得在Linux上顺理成章,换到Windows上就可能令人费解的事

    Linux与Windows都是十分常见的电脑操作系统 相信你对它们二者都有所了解 在你的使用过程中 是否有什么事让你觉得在Linux上顺理成章 换到Windows上就令你费解 亦或者关于这二者你有任何想要分享的 都可以在这里留下你的看法 方
  • PSM倾向得分匹配

    1 简要介绍 我们以 是否上大学 对 收入 的影响为例来说明这个问题 这里 先讲二者的关系设定为如下线性模型 显然 在模型 1 的设定中 我们可能忽略了一些同时影响 解释变量 是否上大学 和 被解释变量 收入 的因素 例如 家庭背景 能力
  • Transformer模型简介

    简介 Transformer 是 Google 团队在 17 年 6 月提出的 NLP 经典之作 由 Ashish Vaswani 等人在 2017 年发表的论文 Attention Is All You Need 中提出 Transfor
  • gitlab分支保护_如何删除gitlab上默认受保护的master主分支

    今天开发在检查代码的时候 发现master分支有问题 现在准备删除此主分支 并且重新提交正确的代码 不过在删除时发现 master分支不能被删除 ps 主分支一般都是线上分支 需要开发确认后并且做好备份才能动 本次是因为master分支已经
  • 使用ngx_log_if模块,对阿里云SLB健康检测产生的大量日志进行过滤处理

    阿里云1000元通用代金券点此领取 最近公司购买了阿里云的SLB服务 健康检测使用的是http和https协议 直接访问web 后端的80端口是nginx 阿里云会按设置的健康检测时间使用get方法 去访问域名下的检查路径 判断web是否存
  • 【ES从入门到实战】十、全文检索-ElasticSearch-进阶-QueryDSL基本使用&match_all

    接第9节 2 Query DSL 在上一节中使用的形如 GET bank search query match all sort account number asc balance desc 的查询语言风格 我们称之为 Query DSL
  • 03-neo4j的命令

    1 查看某个联系格式 MATCH p n 开始Label r 关系名称 m 结束Label RETURN p LIMIT 25 MATCH p n Person r hive m Address RETURN p LIMIT 25 2 连续
  • Jupyterlab离线安装及windows环境多Python内核设置

    一 安装前准备 请浏览 安装多版本python 建立虚拟环境 建立虚拟python环境 假设原python路径为 D Program Files Python310 虚拟环境将建立在d mpy python3108 打开 Windows P
  • Unity今日小结1

    今天在看M Studio老师的视频学了很多东西 这里想要给自己小结一下 首先 在M studio的3DRPG课程中编写敌人追击发现玩家的脚本文件 里面我印象比较深刻的两个函数是Transform LookAt和Physics Overlap
  • openMP的一点使用经验

    最近在看多核编程 简单来说 由于现在电脑CPU一般都有两个核 4核与8核的CPU也逐渐走入了寻常百姓家 传统的单线程编程方式难以发挥多核CPU的强大功能 于是多核编程应运而生 按照我的理解 多核编程可以认为是对多线程编程做了一定程度的抽象
  • 用C#制作塔防游戏

    有点简陋 呵呵 首先一个塔防游戏的主要大类肯定是塔类 怪物类以及地图类了 塔类代码 class Ta public static List
  • 作为一个上班族,有哪些Python兼职项目?兼顾练手和创收?

    普通人学Python有意义吗 Python作为一种跨平台的计算机程序设计语言 近些年来越来越受到企业和IT从业者的青睐 那么 普通人是否需要学习Python呢 学会Python有什么意义呢 今天小编就和大家聊一聊这个话题 Python有效提
  • 统计学第七周 python验证正态分布/卡方分布/T

    统计学第七周 一 知识回顾 上周已经学习过正态分布 卡方分布 T分布等知识 但是如何选择那 正态分布 卡方分布 T分布 二 实践 1 场景 泰坦尼克号数据 主要是age年龄 Fare价格即船票价格 Embark登船的港口 需要验证数据是否服
  • centos MQTT安装和php使用mosquitto的实例

    php安装mqtt 扩展 yum install y php devel yum install y mosquitto devel usr local php bin pecl install Mosquitto alpha 安装过程提示
  • selenium实现zhilian招聘的爬取

    一 主要目的 最近在玩Python网络爬虫 然后接触到了selenium这个模块 就捉摸着搞点有意思的 顺便记录一下自己的学习过程 二 前期准备 操作系统 windows10 浏览器 谷歌浏览器 Google Chrome 浏览器驱动 ch