成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于Python的模擬登陸獲取脈脈好友信息

canopus4u / 3243人閱讀

摘要:代碼已經(jīng)上傳到上簡介這是一個基于而寫的爬蟲,爬取的網(wǎng)站的脈脈網(wǎng),在搜索框中搜索,并切換到人脈選項(xiàng)卡,點(diǎn)擊姓名,進(jìn)入詳情頁,爬取其詳細(xì)信息獲取的具體信息有基本信息工作經(jīng)歷教育經(jīng)歷職業(yè)標(biāo)簽及其認(rèn)可數(shù)點(diǎn)評信息幾度關(guān)系一度二度三度等寫給用戶的注意如

代碼已經(jīng)上傳到github上

簡介:

這是一個基于python3而寫的爬蟲,爬取的網(wǎng)站的脈脈網(wǎng)(https://maimai.cn/),在搜索框中搜索“CHO”,并切換到“人脈”選項(xiàng)卡,點(diǎn)擊姓名,進(jìn)入詳情頁,爬取其詳細(xì)信息

獲取的具體信息有:

基本信息、工作經(jīng)歷、教育經(jīng)歷、職業(yè)標(biāo)簽及其認(rèn)可數(shù)、點(diǎn)評信息

幾度關(guān)系:一度、二度、三度等

寫給用戶的

注意:如果你只是想使用這個項(xiàng)目,那么你可以看這里

如何使用: 使用之前,你要已經(jīng)保證安裝好相關(guān)的庫和軟件:

re

requests

selenium

logging

pymysql

chrome

mysql

使用:

從github上復(fù)制代碼

填寫自己的脈脈手機(jī)號和密碼(你可以在login.py文件中找到他)

建表(詳細(xì)建表見下)

運(yùn)行程序login.py

詳細(xì)建表

需要5張表,下面附上代碼:

表1:basic_info(脈脈好友基本信息)

CREATE TABLE `basic_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "ID",
  `name` varchar(56) NOT NULL COMMENT "名字",
  `mmid` int(11) NOT NULL COMMENT "mmid",
  `rank` int(11) DEFAULT NULL COMMENT "影響力",
  `company` varchar(128) DEFAULT NULL COMMENT "目前公司簡稱",
  `stdname` varchar(128) DEFAULT NULL COMMENT "目前公司全稱",
  `position` varchar(128) DEFAULT NULL COMMENT "目前職位",
  `headline` text COMMENT "自我介紹",
  `ht_province` varchar(128) DEFAULT NULL COMMENT "家鄉(xiāng)-省",
  `ht_city` varchar(128) DEFAULT NULL COMMENT "家鄉(xiāng)-城市",
  `email` varchar(128) DEFAULT NULL COMMENT "郵箱",
  `mobile` varchar(128) DEFAULT NULL COMMENT "手機(jī)",
  `dist` tinyint(1) DEFAULT NULL COMMENT "幾度關(guān)系",
  PRIMARY KEY (`id`),
  UNIQUE KEY `mmid` (`mmid`)
) ENGINE=InnoDB AUTO_INCREMENT=873 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT="脈脈好友基本信息"
]

表2:education_exp(脈脈好友教育經(jīng)歷)

CREATE TABLE `education_exp` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "ID",
  `mmid` int(11) NOT NULL COMMENT "mmid",
  `school_name` varchar(128) DEFAULT NULL COMMENT "學(xué)校名稱",
  `department` varchar(128) DEFAULT NULL COMMENT "專業(yè)",
  `education` int(5) DEFAULT NULL COMMENT "學(xué)歷(0:??疲?:本科,2:碩士,3:博士,255:其他)",
  `start_year` int(11) DEFAULT NULL COMMENT "開始時間(年)默認(rèn)為0000",
  `start_mon` int(11) DEFAULT NULL COMMENT "開始時間(月)默認(rèn)為0000",
  `end_year` int(11) DEFAULT NULL COMMENT "結(jié)束時間(年)默認(rèn)為0000",
  `end_mon` int(11) DEFAULT NULL COMMENT "結(jié)束時間(月)默認(rèn)為0000",
  PRIMARY KEY (`id`),
  UNIQUE KEY `mmid` (`mmid`,`school_name`,`education`,`start_year`)
) ENGINE=InnoDB AUTO_INCREMENT=1064 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT="脈脈好友教育經(jīng)歷"

表3:review_info(脈脈好友點(diǎn)評信息)

CREATE TABLE `review_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "ID",
  `mmid` int(11) NOT NULL COMMENT "mmid",
  `reviewer` varchar(128) DEFAULT NULL COMMENT "點(diǎn)評人",
  `relationship` varchar(128) DEFAULT NULL COMMENT "關(guān)系",
  `position` varchar(128) DEFAULT NULL COMMENT "點(diǎn)評人職位",
  `eva_info` text COMMENT "評價(jià)信息",
  PRIMARY KEY (`id`),
  UNIQUE KEY `mmid` (`mmid`,`reviewer`)
) ENGINE=InnoDB AUTO_INCREMENT=400 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT="脈脈好友點(diǎn)評信息"

表4:tag_info(脈脈好友點(diǎn)評信息)

CREATE TABLE `tag_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "ID",
  `mmid` int(11) NOT NULL COMMENT "mmid",
  `tag` varchar(128) DEFAULT NULL COMMENT "標(biāo)簽",
  `rec_num` varchar(128) DEFAULT NULL COMMENT "認(rèn)可度",
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQUE` (`mmid`,`tag`,`rec_num`)
) ENGINE=InnoDB AUTO_INCREMENT=5881 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT="脈脈好友點(diǎn)評信息"

表5:work_exp(脈脈好友工作經(jīng)歷)

CREATE TABLE `work_exp` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "ID",
  `mmid` int(11) NOT NULL COMMENT "mmid",
  `company` varchar(128) DEFAULT NULL COMMENT "公司簡稱",
  `stdname` varchar(128) DEFAULT NULL COMMENT "公司全稱",
  `et_url` varchar(244) DEFAULT NULL COMMENT "公司頁面url",
  `description` text COMMENT "描述",
  `start_year` int(11) DEFAULT NULL COMMENT "開始時間(年)默認(rèn)0000",
  `start_mon` int(11) DEFAULT NULL COMMENT "開始時間(月)默認(rèn)0000",
  `end_year` int(11) DEFAULT NULL COMMENT "結(jié)束時間(年)默認(rèn)0000",
  `end_mon` int(11) DEFAULT NULL COMMENT "結(jié)束時間(月)默認(rèn)0000",
  `position` varchar(128) DEFAULT NULL COMMENT "職位",
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQUE` (`mmid`,`company`,`start_year`,`position`)
) ENGINE=InnoDB AUTO_INCREMENT=2582 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT="脈脈好友工作經(jīng)歷"


寫給開發(fā)者的

如果你是一個開發(fā)者,那么請看這里

具體的每個函數(shù)的作用,就不細(xì)說了,代碼中有注釋,可以自行查看

請求:

在這里我們主要說說請求這一塊:

請求需要解決2個問題:

第一個是使用cookies模擬登陸

第二個是數(shù)據(jù)獲取


模擬登陸

這是使用selenium驅(qū)動瀏覽器登錄脈脈,然后獲取cookie這樣來就省去了自己去拼接cookie的麻煩,獲取到cookie之后,在利用cookie來進(jìn)行requests請求數(shù)據(jù),這里不再使用selenium是因?yàn)閟elenium太慢,而且比較容易出錯

看一下代碼,思路是:

設(shè)置selenium參數(shù)

使用selenium打開到登錄網(wǎng)址

輸入手機(jī)號和密碼,進(jìn)行登錄

獲取cookies,并存到j(luò)son文件中

這樣就獲取cookies成功了,之后將cookies添加到requests請求中,進(jìn)行數(shù)據(jù)獲取

def get_cookies():
    """
    使用selenium獲取cookies的值,將其存在文件中
    :return:
    """
    logger.info("使用selenium獲取cookies")
    chrome_options = Options()
    chrome_options.add_argument("--no-sandbox")  # 解決DevToolsActivePort文件不存在的報(bào)錯
    chrome_options.add_argument("--disable-gpu")  # 谷歌文件提到需要加這個屬性來規(guī)避bug
    chrome_options.add_argument("--headless")  # 無界面設(shè)置
    chrome = webdriver.Chrome(chrome_options=chrome_options)
    login_url = "https://acc.maimai.cn/login"
    chrome.get(login_url)
    wait = WebDriverWait(chrome, 10)
    wait.until(EC.element_to_be_clickable(("xpath", "http://input[@class="loginBtn"]")))
    time.sleep(1)
    user_name = "***"  # 你的手機(jī)號
    password = "***"  # 你的密碼
    chrome.find_element("xpath", "http://input[@class="loginPhoneInput"]").send_keys(user_name)
    time.sleep(1)
    chrome.find_element("xpath", "http://input[@id="login_pw"]").send_keys(password)
    chrome.find_element("xpath", "http://input[@class="loginBtn"]").click()
    cookies = chrome.get_cookies()
    with open("cookie.json", "w+")as f:
        f.write(json.dumps(cookies))
        f.close()
    logger.info("cookies獲取成功")
    chrome.close()


數(shù)據(jù)獲取

這里面主要有2個問題:

第一個網(wǎng)站使用了ajax加載,我們需要找到我們需要的url

第二個是獲取的html需要進(jìn)行處理,才能被我們所利用

ajax加載

直接去請求https://maimai.cn/web/search_center?type=contact&query=cho&highlight=true這里,獲取的信息是不全的,這里使用了ajax加載,我們打開google看一下,按F12打開開發(fā)者模式看一下

如圖,我們可以在這里找我們需要的數(shù)據(jù),這個是url:https://maimai.cn/search/cont...,這里獲取的是json格式的數(shù)據(jù),非常好解析,再進(jìn)一步去獲取詳細(xì)信息的頁面的時候,其方法也是一樣的,這里就不多做說明了

html頁面數(shù)據(jù)處理的問題

有一部分的數(shù)據(jù)是以json的形式返回給我們的,但是還有一些數(shù)據(jù)是在原網(wǎng)頁中一起返回的,雖然也是json的形式,但是處理起來還是有一定的麻煩,看一下原網(wǎng)頁的數(shù)據(jù)

這個JSON.parse后面的數(shù)據(jù)也是我們需要的,可以發(fā)現(xiàn)這里有一些像"u0022"的數(shù)據(jù),這個其實(shí)是雙引號的utf8編碼,還有一些其他的字符,會以utf8編碼的形式返回的,直接處理很不好處理,我們先將這些字符編碼替換為對應(yīng)的字符,之后轉(zhuǎn)成json的格式進(jìn)行解析,這樣就方便多了,看一下代碼:

def json_info(html):
    """
    處理獲取的html,轉(zhuǎn)換為json格式
    :param html:
    :return:
    """
    print(html.text)
    c = re.search("JSON.parse("(.*?)");

思路是很簡單的:

先是將用正則匹配所需要的數(shù)據(jù)

拿下來之后將一些utf8編碼的字符替換掉

轉(zhuǎn)換為json的格式進(jìn)行解析


主要需要解決的問題就只有這些,其他的一些數(shù)據(jù)處理,存儲都是很簡單和常見的,就不多做說明了

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43486.html

相關(guān)文章

  • 首次公開,整理12年積累博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • Python爬蟲學(xué)習(xí):微信、知乎、新浪等主流網(wǎng)站模擬登陸爬取方法

    摘要:微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法摘要微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法。先說說很難爬的知乎,假如我們想爬取知乎主頁的內(nèi)容,就必須要先登陸才能爬,不然看不到這個界面。圖片描述知乎需要手機(jī)號才能注冊登陸。 微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法摘要:微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法。 網(wǎng)絡(luò)上有形形色色的網(wǎng)站,不同類型的網(wǎng)站爬蟲策略不同,難易程度也不一樣。從是...

    Kahn 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<