国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python爬蟲——Python 崗位分析報(bào)告

william / 1150人閱讀

摘要:歡迎關(guān)注公號智能制造社區(qū)學(xué)習(xí)更多原創(chuàng)智能制造及編程知識(shí)。無無無無無無無獲取所有數(shù)據(jù)了解了如何解析數(shù)據(jù),剩下的就是連續(xù)請求所有頁面了,我們構(gòu)造一個(gè)函數(shù)來請求所有頁的數(shù)據(jù)。

前兩篇我們分別爬取了糗事百科和妹子圖網(wǎng)站,學(xué)習(xí)了 Requests, Beautiful Soup 的基本使用。不過前兩篇都是從靜態(tài) HTML 頁面中來篩選出我們需要的信息。這一篇我們來學(xué)習(xí)下如何來獲取 Ajax 請求返回的結(jié)果。

歡迎關(guān)注公號【智能制造社區(qū)】學(xué)習(xí)更多原創(chuàng)智能制造及編程知識(shí)。

Python 爬蟲入門(二)——爬取妹子圖
Python 爬蟲入門(一)——爬取糗百

本篇以拉勾網(wǎng)為例來說明一下如何獲取 Ajax 請求內(nèi)容

本文目標(biāo)

獲取 Ajax 請求,解析 JSON 中所需字段

數(shù)據(jù)保存到 Excel 中

數(shù)據(jù)保存到 MySQL, 方便分析

簡單分析

五個(gè)城市 Python 崗位平均薪資水平

Python 崗位要求學(xué)歷分布

Python 行業(yè)領(lǐng)域分布

Python 公司規(guī)模分布

查看頁面結(jié)構(gòu)

我們輸入查詢條件以 Python 為例,其他條件默認(rèn)不選,點(diǎn)擊查詢,就能看到所有 Python 的崗位了,然后我們打開控制臺(tái),點(diǎn)擊網(wǎng)絡(luò)標(biāo)簽可以看到如下請求:

從響應(yīng)結(jié)果來看,這個(gè)請求正是我們需要的內(nèi)容。后面我們直接請求這個(gè)地址就好了。從圖中可以看出 result 下面就是各個(gè)崗位信息。

到這里我們知道了從哪里請求數(shù)據(jù),從哪里獲取結(jié)果。但是 result 列表中只有第一頁 15 條數(shù)據(jù),其他頁面數(shù)據(jù)怎么獲取呢?

分析請求參數(shù)

我們點(diǎn)擊參數(shù)選項(xiàng)卡,如下:

發(fā)現(xiàn)提交了三個(gè)表單數(shù)據(jù),很明顯看出來 kd 就是我們搜索的關(guān)鍵詞,pn 就是當(dāng)前頁碼。first 默認(rèn)就行了,不用管它。剩下的事情就是構(gòu)造請求,來下載 30 個(gè)頁面的數(shù)據(jù)了。

構(gòu)造請求,并解析數(shù)據(jù)

構(gòu)造請求很簡單,我們還是用 requests 庫來搞定。首先我們構(gòu)造出表單數(shù)據(jù) data = {"first": "true", "pn": page, "kd": lang_name} 之后用 requests 來請求url地址,解析得到的 Json 數(shù)據(jù)就算大功告成了。由于拉勾對爬蟲限制比較嚴(yán)格,我們需要把瀏覽器中 headers 字段全部加上,而且把爬蟲間隔調(diào)大一點(diǎn),我后面設(shè)置的為 10-20s,然后就能正常獲取數(shù)據(jù)了。

import requests

def get_json(url, page, lang_name):
    headers = {
        "Host": "www.lagou.com",
        "Connection": "keep-alive",
        "Content-Length": "23",
        "Origin": "https://www.lagou.com",
        "X-Anit-Forge-Code": "0",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "X-Requested-With": "XMLHttpRequest",
        "X-Anit-Forge-Token": "None",
        "Referer": "https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7"
    }
    data = {"first": "false", "pn": page, "kd": lang_name}
    json = requests.post(url, data, headers=headers).json()
    list_con = json["content"]["positionResult"]["result"]
    info_list = []
    for i in list_con:
        info = []
        info.append(i.get("companyShortName", "無"))
        info.append(i.get("companyFullName", "無"))
        info.append(i.get("industryField", "無"))
        info.append(i.get("companySize", "無"))
        info.append(i.get("salary", "無"))
        info.append(i.get("city", "無"))
        info.append(i.get("education", "無"))
        info_list.append(info)
    return info_list
獲取所有數(shù)據(jù)

了解了如何解析數(shù)據(jù),剩下的就是連續(xù)請求所有頁面了,我們構(gòu)造一個(gè)函數(shù)來請求所有 30 頁的數(shù)據(jù)。

def main():
    lang_name = "python"
    wb = Workbook()
    conn = get_conn()
    for i in ["北京", "上海", "廣州", "深圳", "杭州"]:
        page = 1
        ws1 = wb.active
        ws1.title = lang_name
        url = "https://www.lagou.com/jobs/positionAjax.json?city={}&needAddtionalResult=false".format(i)
        while page < 31:
            info = get_json(url, page, lang_name)
            page += 1
            import time
            a = random.randint(10, 20)
            time.sleep(a)
            for row in info:
                insert(conn, tuple(row))
                ws1.append(row)
    conn.close()
    wb.save("{}職位信息.xlsx".format(lang_name))

if __name__ == "__main__":
    main()
完整代碼
import random
import time

import requests
from openpyxl import Workbook
import pymysql.cursors


def get_conn():
    """建立數(shù)據(jù)庫連接"""
    conn = pymysql.connect(host="localhost",
                                user="root",
                                password="root",
                                db="python",
                                charset="utf8mb4",
                                cursorclass=pymysql.cursors.DictCursor)
    return conn


def insert(conn, info):
    """數(shù)據(jù)寫入數(shù)據(jù)庫"""
    with conn.cursor() as cursor:
        sql = "INSERT INTO `python` (`shortname`, `fullname`, `industryfield`, `companySize`, `salary`, `city`, `education`) VALUES (%s, %s, %s, %s, %s, %s, %s)"
        cursor.execute(sql, info)
    conn.commit()


def get_json(url, page, lang_name):
    """返回當(dāng)前頁面的信息列表"""
    headers = {
        "Host": "www.lagou.com",
        "Connection": "keep-alive",
        "Content-Length": "23",
        "Origin": "https://www.lagou.com",
        "X-Anit-Forge-Code": "0",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "X-Requested-With": "XMLHttpRequest",
        "X-Anit-Forge-Token": "None",
        "Referer": "https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7"
    }
    data = {"first": "false", "pn": page, "kd": lang_name}
    json = requests.post(url, data, headers=headers).json()
    list_con = json["content"]["positionResult"]["result"]
    info_list = []
    for i in list_con:
        info = []
        info.append(i.get("companyShortName", "無"))  # 公司名
        info.append(i.get("companyFullName", "無"))
        info.append(i.get("industryField", "無"))   # 行業(yè)領(lǐng)域
        info.append(i.get("companySize", "無"))  # 公司規(guī)模
        info.append(i.get("salary", "無"))   # 薪資
        info.append(i.get("city", "無"))
        info.append(i.get("education", "無"))   # 學(xué)歷
        info_list.append(info)
    return info_list   # 返回列表


def main():
    lang_name = "python"
    wb = Workbook()  # 打開 excel 工作簿
    conn = get_conn()  # 建立數(shù)據(jù)庫連接  不存數(shù)據(jù)庫 注釋此行
    for i in ["北京", "上海", "廣州", "深圳", "杭州"]:   # 五個(gè)城市
        page = 1
        ws1 = wb.active
        ws1.title = lang_name
        url = "https://www.lagou.com/jobs/positionAjax.json?city={}&needAddtionalResult=false".format(i)
        while page < 31:   # 每個(gè)城市30頁信息
            info = get_json(url, page, lang_name)
            page += 1
            time.sleep(random.randint(10, 20))
            for row in info:
                insert(conn, tuple(row))  # 插入數(shù)據(jù)庫,若不想存入 注釋此行
                ws1.append(row)
    conn.close()  # 關(guān)閉數(shù)據(jù)庫連接,不存數(shù)據(jù)庫 注釋此行
    wb.save("{}職位信息.xlsx".format(lang_name))

if __name__ == "__main__":
    main()

GitHub 地址:https://github.com/injetlee/Python/tree/master/%E7%88%AC%E8%99%AB%E9%9B%86%E5%90%88

如果你想要爬蟲獲取的崗位信息,請關(guān)注公號【智能制造社區(qū)】后臺(tái)留言發(fā)送 "python崗位"。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42349.html

相關(guān)文章

  • Python爬蟲案例50篇-第8篇- 抓取某訊招聘的北京工作崗位

    摘要:提前聲明該專欄涉及的所有案例均為學(xué)習(xí)使用,如有侵權(quán),請聯(lián)系本人刪帖文章目錄一前言二網(wǎng)站分析三編寫面向?qū)ο蟠a四多線程代碼一前言在這里插入圖片描述在傳送門自己爬取過的個(gè)基礎(chǔ)爬蟲案例這個(gè)案例中,我們講解過對騰訊招聘信息的 ...

    wanghui 評論0 收藏0
  • node.js 爬取招聘信息分析各職業(yè)錢途(爬蟲+動(dòng)態(tài)IP代理+數(shù)據(jù)可視化分析

    摘要:成功爬取了拉鉤網(wǎng)上多個(gè)招聘崗位的具體信息后,數(shù)據(jù)可視化并得出分析結(jié)果如下從整體看,北上廣深杭這五個(gè)城市前端工程師招聘崗位,北京是遙遙領(lǐng)先,是深圳的兩倍,是廣州的三倍,其次到上海,深圳,杭州,廣州居末。 前前言 本文首發(fā)于 github blog 不想看爬蟲過程只想看職位錢途數(shù)據(jù)分析請看這里:前端招聘崗位分析C++招聘崗位分析JAVA招聘崗位分析PHP招聘崗位分析Python招聘崗位分析...

    546669204 評論0 收藏0
  • 拉勾數(shù)據(jù)崗位和熱門編程語言現(xiàn)狀分析

    摘要:另外數(shù)學(xué)成為了一個(gè)關(guān)鍵詞,編程語言主要是等,運(yùn)營也出現(xiàn)在詞云中說明數(shù)據(jù)分析師也需要有運(yùn)營能力。 功能點(diǎn) 爬取數(shù)據(jù) 所有公司數(shù)據(jù),名稱簡寫,城市,行業(yè),職位數(shù)量,人數(shù)范圍,標(biāo)簽,介紹,融資階段,平均工資 github2016年度最受歡迎編程語言相應(yīng)年數(shù)薪水,城市,學(xué)歷要求,公司融資階段,公司行業(yè) 大數(shù)據(jù)行業(yè)五大崗位相應(yīng)年數(shù)薪水,城市,學(xué)歷要求,公司融資階段,公司行業(yè),崗位要求 編程語...

    atinosun 評論0 收藏0
  • 前程無憂崗位數(shù)據(jù)爬取+Tableau可視化分析

    摘要:實(shí)際上,前程無憂招聘網(wǎng)站上與數(shù)據(jù)有關(guān)的只有幾百頁,而我們爬取了頁的所有數(shù)據(jù),因此在后面進(jìn)行數(shù)據(jù)處理時(shí)需要把無關(guān)的數(shù)據(jù)剔除掉。 目錄 一、項(xiàng)目背景 二、數(shù)據(jù)爬取 1、相關(guān)庫的導(dǎo)入與說明 2、獲取二級頁面鏈接 1)分析一級頁面url特征 2)構(gòu)建一級url庫 3)爬取所有二級url鏈接 3、獲取...

    233jl 評論0 收藏0
  • Python面試經(jīng)驗(yàn)總結(jié),面試一時(shí)爽,一直面試一直爽!

    摘要:面試的心得體會(huì)簡歷制作我做了兩份簡歷,用兩個(gè)手機(jī)賬號,兩個(gè)簡歷名字,分別在各個(gè)招聘網(wǎng)站投了雙份簡歷,一個(gè)是數(shù)據(jù)分析的簡歷一個(gè)是全棧開發(fā)的簡歷,我真正接觸快年,不管是學(xué)習(xí)還是工作學(xué)到的東西,這兩年大概掌握了前端爬蟲數(shù)據(jù)分析機(jī)器學(xué)習(xí)技術(shù), showImg(https://upload-images.jianshu.io/upload_images/13090773-b96aac7e974c...

    gxyz 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<