摘要:在和偉鋒探討的時候,我突然想到了可以用爬蟲的手段,來將數據中心的數據全部爬取出來。這里做一個技術記錄,中間涉及到的知識點包括如何通過中的,以及維持登陸狀態,以爬取不同的需要登陸以后才能查看的網頁。
前言說明:
公司在2017年3月的時候開發過一個「數據中心」,是將有贊的用戶和訂單信息通過API拉取到自己開發的網站上,再結合我們自己和用戶溝通的信息,組成一個簡單的用戶管理中心。數據中心雖然簡單,但對我們意義非常大,它的出現標志著我們想要定位一個用戶的時候告別了“辦公室吼一吼”的純人肉方法。
不過隨著時間的推移,數據中心跟不上我們的業務發展,我們想在近期將其重新做一遍,進行一系列大的功能升級。別的都好說,唯一的問題是在過去一年半中,我們在數據中心添加了大量的信息,比如同學的微信號、昵稱、他家長的信息、他的訂單備注信息等等。隨著遠良的離職,后來的人已經很難從數據庫中找出這些數據。在和偉鋒探討CRM的時候,我突然想到了可以用爬蟲的手段,來將數據中心的數據全部爬取出來。于是便有了下面的代碼,經過斷斷續續兩三天的研究,我終于搞定了代碼,順利爬取了我們所有超過1萬條的用戶數據。
這里做一個技術記錄,中間涉及到的知識點包括:
如何通過Network中的authorization,以及requests.session()維持登陸狀態,以爬取不同的需要登陸以后才能查看的網頁。這里面有個坑,就是我先用了session的方法來試圖解決問題,但是怎么試都總是失敗,反復查詢后發現發現數據中心是用node.js來寫的,而這樣的網頁用的是token來驗證身份,session()那套行不通。最后我在頭信息中發現authorization,直接粘到headers的信息才解決問題的;
查看網頁源代碼,如果你需要的信息不在源代碼中,那就說明要找的內容在JS文件中,在開發者模式下找到Network中的XHR或者JS,里面一般都會有某個JS文件包含你要的信息(header包含頭信息,preview包含要爬取的信息,最上面的request URL則是要爬取內容所需要的網址信息)。
復習了json的使用方法。另外,不管是python還是json,爬取的關鍵都是找到循環點,因為循環點意味著有規律循環的開始;
復習了在python中打開、寫入csv文件的方式;
復習了在python中連接數據庫的知識;Python3 MySQL 數據庫連接 - PyMySQL 驅動
學習了try...except的用法:將可能出現bug的代碼寫入try的部分,然后在except那里寫入報錯類型和報錯的提示。報錯提示可以根據需要自定義。這樣的好處是程序出現bug的時候不會報錯終止,而是會給出報錯提示以后繼續后面的運行,直到結束。(Python)異常處理try...except、raise
復習列表構造的知識;
簡單學習了SQL的基本操作語句 SQL基本語法
import requests import json import csv import pymysql import time # 從數據庫中獲取所有的用戶ID yz_uids = [] db = pymysql.connect("192.168.31.24","root","root","danci_tddc") # 連接數據庫 cursor = db.cursor() # 用cursor 方法獲取操作游標 sql = "SELECT * FROM td_crm_customers" # 寫sql語句 cursor.execute(sql) # 執行sql語句 data = cursor.fetchall() # 獲取數據 for row in data: yz_uid = row[0] yz_uids.append(yz_uid) db.close() # 關閉數據庫連接 login_url = "http://data.testdaily.cn/#!/login" headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36", "Referer": "http://data.testdaily.cn/", "Cookie": "Hm_lvt_fc5a4042b4f7e4c87111dce89bb04bea=1539932447,1540895924", "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1OGI3ZWU4ZmI2NmVmZjEwMWM5NGVjODgiLCJ1c2VybmFtZSI6Inplbmd5aWNoYW8iLCJleHAiOjE1NDIxODA5OTksImlhdCI6MTU0MTU3NjE5OX0.dl7o4lnPZnfw7e606sVOrW4dYCKOmQJzSsMBHCFPAc4" } # 打開存儲的csv文檔 f = open("/Users/damo/Desktop/4.csv", "w+") writer = csv.writer(f) writer.writerow(["user_id", "wechat", "nickname", "majia", "phone", "address", "name", "tag", "parentInfo", "remark", "update_time","trade_history"]) # 獲取單個頁面的數據 def get_info(url): try: # 讀取客戶詳情頁面并獲取json數據 res = requests.get(url,headers = headers) json_data = json.loads(res.text) user_id = json_data["user_id"] wechat = json_data["wechat"] if "nickname" in json_data.keys(): nickname = json_data["nickname"] else: nickname = "" majia = json_data["tdAlias"] phone = json_data["mobile"] address = json_data["address"] name = json_data["name"] tag = json_data["tags"] if "parentsInfo" in json_data.keys(): parentInfo = json_data["parentsInfo"] else: parentInfo = "" if "remark" in json_data.keys(): remark = json_data["remark"] else: remark = "" update_time = json_data["update_time"] trade_history = json_data["trades"] writer.writerow([user_id,wechat,nickname,majia,phone,address,name,tag,parentInfo,remark,update_time,trade_history]) # 將數據寫入csv文件 except TypeError: print(url + "有問題") if __name__ == "__main__": urls = ["http://data.testdaily.cn/api/customers/{}".format(i) for i in yz_uids] # 構造列表表達式 for url in urls: get_info(url)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44974.html
摘要:用將倒放這次讓我們一個用做一個小工具將動態圖片倒序播放發現引力波的機構使用的包美國科學家日宣布,他們去年月首次探測到引力波。宣布這一發現的,是激光干涉引力波天文臺的負責人。這個機構誕生于上世紀年代,進行引力波觀測已經有近年。 那些年我們寫過的爬蟲 從寫 nodejs 的第一個爬蟲開始陸陸續續寫了好幾個爬蟲,從爬拉勾網上的職位信息到爬豆瓣上的租房帖子,再到去爬知乎上的妹子照片什么的,爬蟲...
摘要:之前在學校曾經用過的方法做過一些爬蟲腳本來玩,從正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐。爬蟲腳本通常會很頻繁的進行網絡請求,比如要爬取豆瓣排行榜的電影,就會連續發送個網絡請求。 之前在學校曾經用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐...
摘要:之前在學校曾經用過的方法做過一些爬蟲腳本來玩,從正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐。爬蟲腳本通常會很頻繁的進行網絡請求,比如要爬取豆瓣排行榜的電影,就會連續發送個網絡請求。 之前在學校曾經用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉前端之后,出于興趣,我對爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實踐...
摘要:月日,助力在北京舉辦全球最盛大的年度聚會,國內外頂尖的工程師做了很精彩的分享和互動,現場多名愛好者參與了此次技術主題盛宴。后續會有更多現場照片持續更新 11月15日,SegmentFault 助力PyCon China 在北京舉辦全球 Pythoneer 最盛大的年度聚會,國內外頂尖的Python 工程師做了很精彩的分享和互動,現場300多名python愛好者參與了此次技術主題盛宴。 ...
摘要:主要特性前一陣重新組織了一下代碼加了命令行信息用起來更方便了一些初步實現了豆瓣小組及用戶相關的爬蟲和請求基于和沒有用高階的諸如之類的爬蟲工具所有的命令行輸出都是標準的格式可以使用操作安裝僅支持使用兩種命令模式客戶端接口調用和豆瓣模塊接口 主要特性 前一陣重新組織了一下代碼, 加了命令行help信息, 用起來更方便了一些 初步實現了豆瓣小組及用戶相關的API爬蟲和請求 基于reques...
閱讀 1626·2021-09-02 09:55
閱讀 1092·2019-08-30 13:19
閱讀 1392·2019-08-26 13:51
閱讀 1445·2019-08-26 13:49
閱讀 2372·2019-08-26 12:13
閱讀 451·2019-08-26 11:52
閱讀 1898·2019-08-26 10:58
閱讀 3084·2019-08-26 10:19