【爬取二手車并將數據保存在數據庫中】

爬取二手車并將數據保存在數據庫中

  • 查看網頁結構分析爬取步驟
  • 解密加密信息
    • 將密文解密代碼:
  • 進行爬取:
    • 爬取函數
    • 寫入解密文件函數和獲取城市函數
    • 解密文件,返回正確字符串函數
    • 保存到數據庫
  • 運行結果

查看網頁結構分析爬取步驟

可以看出網頁使用了一定的加密
在這里插入圖片描述
找到城市所在的位置,為之后的城市循環提供方便
在這里插入圖片描述

解密加密信息

在加密信息的class元素可以看到加密的文件名稱
在這里插入圖片描述
在source下面可以看到此文件 是一個woff文件
在這里插入圖片描述
這個woff文件每天都會變化 我們可以在主頁中的head下的style下面找到這個woff文件的url鏈接,此后我們爬取頁面時每次都爬一下這個woff文件并且保存下來就可以避免數據錯誤
在這里插入圖片描述

將密文解密代碼:

    # 讀取加密文件進行密令轉換tf = TTFont("./trans.woff")# 可以打印看一下tf.getGlyphOrder()是什么東西num_list = tf.getGlyphOrder()[1:]num_dict = {"zero": 0, "one": 1, "two": 2,"three": 3, "four": 4, "five": 5,"six": 6, "seven": 7, "eight": 8,"nine": 9}albnum_list = [num_dict[i] for i in num_list]# 密令轉換列表new_string = ''for i in old_str:if i.isdigit():char = albnum_list.index(int(i))new_string += str(char)else:new_string += ireturn new_string

進行爬取:

爬取函數

def spider_data(url,driver,conn,cur):# 訪問汽車信息頁面driver.get(url)li_list = driver.find_elements(By.XPATH,'//ul[@class = "row-fluid list-row js-car-list"]/li')print(li_list)print("開始獲取每一個汽車的信息!")for li in li_list:# 如果這個頁面不為空則進行trytry:# 找到汽車信息所在的位置car_info = str_tran(li.find_element(By.XPATH,"a/h3").text)car_year_mile = li.find_element(By.XPATH, "a/div[@class='mileage']/span").textcar_year = datetime.strptime(str_tran(car_year_mile).split("/")[0],"%Y年%m月").date()car_mile = re.match('(.*?)萬',str_tran(car_year_mile).split("/")[1]).group(1)car_price_total = li.find_element(By.XPATH, "a/div[@class='tags-box']/div").textcar_price_total = re.match('(.+?)萬',car_price_total).group(1)try: # 如果有首付價格則進行trycar_price_pyment = li.find_element(By.XPATH, "a//div[@class='down-payment']/div").textexcept Exception as e: # 沒有首付價格 則首付價格等于車價car_price_pyment = car_price_totalprint(car_info,car_year,car_mile,car_price_total,car_price_pyment)# 保存到數據庫中store_data(car_info,car_year,car_mile,car_price_total,car_price_pyment,conn,cur)# 頁面為空則報告錯誤 接著下一個汽車信息的爬取except Exception as e:print('********************error****************')print('*********************廣告*****************')

寫入解密文件函數和獲取城市函數

# 獲取城市拼音 和 解密的信息列表
def get_city_name(driver):password_code = []city_code = []# 先訪問一次頁面driver.get('https://www.renrenche.com/hf/ershouche/p1')# 找到城市的標簽所在位置div_list = driver.find_elements(By.XPATH,'//div[@class="area-city-letter"]/div')# 將城市的拼音全部保存到一個列表中for div in div_list:a_list = div.find_elements(By.XPATH,'a')for a in a_list:city_code.append(a.get_attribute('rrc-event-name'))# 找到密文所在htm中的位置在style中 獲取style標簽下的元素內容的方法如下url_str = driver.find_element(By.XPATH,'//style[1]').get_attribute('textContent')# 匹配獲取woff加密文件的urlwoff_url = re.match('[\s\S]+?url\(\'(.*?.woff)\'', url_str).group(1)# 使用requests請求 將文件用二進制的方式保存下來response = requests.get(woff_url,headers={'user-agent': fake_useragent.UserAgent().random})re_cont = response.contentwith open('./trans.woff', 'wb') as fp:fp.write(re_cont)# 返回城市的拼音return city_code

解密文件,返回正確字符串函數

# 讀取woff文件 然后進行將錯誤的字符串轉化成為正確的字符串
def str_tran(old_str):# 讀取加密文件進行密令轉換tf = TTFont("./trans.woff")num_list = tf.getGlyphOrder()[1:]num_dict = {"zero": 0, "one": 1, "two": 2,"three": 3, "four": 4, "five": 5,"six": 6, "seven": 7, "eight": 8,"nine": 9}albnum_list = [num_dict[i] for i in num_list]# 密令轉換列表new_string = ''for i in old_str:if i.isdigit():char = albnum_list.index(int(i))new_string += str(char)else:new_string += ireturn new_string

保存到數據庫

def store_data(car_info,car_year,car_mile,car_price_total,car_price_pyment,conn,cur):number = 0insert_sql = f"insert into car_info() values({number},'{car_info}','{car_year}','{car_mile}','{car_price_total}','{car_price_pyment}')"try:cur.execute(insert_sql)except Exception as e:conn.rollback()conn.commit()print("插入數據庫完成!")

運行結果

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207742.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C 語言 變量

變量初始值 全局變量:初始值是 0 局部變量:初始值是 隨機的 類型限定符 通常不需要顯式使用 register 關鍵字來優化變量的存儲和訪問。 關鍵字 _Complex和_Imaginary分別用于表示復數和虛數(二者皆是數學概念) 變量的聲明和定義 c…

蘋果 macOS 14.1.2 正式發布 更新了哪些內容?

蘋果今日向 Mac 電腦用戶推送了 macOS 14.1.2 更新(內部版本號:23B92 | 23B2091),本次更新距離上次發布隔了 28 天。 需要注意的是,因蘋果各區域節點服務器配置緩存問題,可能有些地方探測到升級更新的時間略…

webWorker解決單線程中的一些小問題和性能優化

背景 js是單線程這是大家都知道,為了防止多個線程同時操作DOM,這個導致一個復雜的同步問題。比如,假定JavaScript同時有兩個線程,一個線程在某個DOM節點上添加內容,另一個線程刪除了這個節點,這時瀏覽器應…

全局平均池化的示例

1.對一個3通道,5*5的矩陣,進行全局平均池化 每個矩陣的大小都是 5x5,假設這些矩陣代表一幅圖像的三個不同通道。為簡單起見,我們將這三個矩陣分別稱為 A、B 和 C。合成圖像將是一個三通道圖像,每個通道由其中一個矩陣…

計算機方向的一些重要縮寫和簡介

參考: 深度學習四大類網絡模型 干貨|機器學習超全綜述! 機器學習ML、卷積神經網絡CNN、循環神經網絡RNN、馬爾可夫蒙特卡羅MCMC、生成對抗網絡GAN、圖神經網絡GNN——人工智能經典算法 MLP(Multi Layer Perseption)用在神經網絡中…

這是最后的戰役了

不變因子 初等因子 行列式因子 smith標準型 酉矩陣 H-陣等等 A H A A^H A AHA 就是 H-陣 正定H陣的性質 若 A A A 為正定的H-陣. 存在可逆矩陣 Q Q Q, 使得 A Q H Q AQ^H Q AQHQ.存在 P P P, 使得 P H A P I P^HAPI PHAPI.A的特征值大于0. Q ? 1 A Q Q^{…

駕馭蘋果的人工智慧模式:克服反擊與應對挑戰

蘋果一年一度的秋季「春晚」時間越來越近,但在大模型浪潮下,蘋果何時推出自己的「蘋果GPT」成了另一個關注的話題。 畢竟,前有華為,后有小米,在中國手機廠商爭相將大模型裝進移動終端的同時,蘋果卻依舊對A…

微服務學習:Ribbon實現客戶端負載均衡,將請求分發到多個服務提供者

Ribbon是Netflix開源的一個基于HTTP和TCP客戶端負載均衡器。它主要用于在微服務架構中實現客戶端負載均衡,將請求分發到多個服務提供者上,從而實現高可用性和擴展性。 Ribbon的主要特點包括: 客戶端負載均衡:Ribbon是一個客戶端負…

【算法題】找出符合要求的字符串子串(js)

題解: function solution(str1, str2) {const set1 new Set([...str1]);const set2 new Set([...str2]);return [...set1].filter((item) > set2.has(item)).sort();}console.log(solution("fach", "bbaaccedfg"));//輸入:fach// bbaacced…

手機上寫工作總結用什么軟件好?借助工作筆記輕松寫出優秀年終總結

隨著年底的臨近,撰寫個人年終工作總結成為了許多職場人士的重要任務。因為手機是每個上班族都要隨身攜帶的電子設備,所以想要抽時間來寫年終工作總結,使用手機是比較便捷的。那么,在手機上寫工作總結應該使用什么軟件呢&#xff1…

Linux 環境下的性能測試——top與stress

對于Linux 環境,top命令是使用頻繁且信息較全的命令, 它對于所有正在運行的進行和系統負荷提供實時更新的概覽信息。stress是個簡單且全面的性能測試工具。通過它可以模擬各種高負載情況。 通過top與stress這兩個命令的結合使用,基本可以達到…

軟件測試——單元測試

單元測試是軟件開發中的一種測試方法,用于驗證軟件中的各個獨立單元(通常是函數、方法或類)是否按照設計規范正常工作。以下是進行單元測試的一般步驟和最佳實踐: 1. 選擇測試框架 選擇適合項目的測試框架,例如&…

SHAP:Python的可解釋機器學習庫

SHAP:Python的可解釋機器學習庫 一、概念二、步驟三、代碼-以波士頓房價為例summary_plotFeature Importanceshap_interaction_valuesdependence_plot完整代碼一、概念 SHAP(Shapley Additive Explanations)模型是一種用于解釋機器學習模型預測結果的方法。它基于合作博弈論…

【C++】類和對象——explicit關鍵字,友元和內部類

這篇博客已經到了類和對象的最后一部分了&#xff0c;下面我們先看一下explicit關鍵字 我們還是先來引入一個例子&#xff0c;我們的代碼是可以這么寫的 class A { public:A(int aa 0) {_a aa;cout << "A(int aa 0)" << endl;} private:int _a; }; i…

紅隊攻防實戰之Redis-RCE集錦

心若有所向往&#xff0c;何懼道阻且長 Redis寫入SSH公鑰實現RCE 之前進行端口掃描時發現該機器開著6379&#xff0c;嘗試Redis弱口令或未授權訪問 嘗試進行連接Redis&#xff0c;連接成功&#xff0c;存在未授權訪問 嘗試寫入SSH公鑰 設置redis的備份路徑 設置保存文件名 …

[GXYCTF2019]禁止套娃1

提示 git泄露無參數rce &#xff01;&#xff01;注意需要python3環境 github里dirsearch工具下載位置 ###可能需要開節點才能打開 百度網盤dirsearch下載地址 ###如果github里下載不了可以在網盤下載 提取碼sx5d 只給了flag在哪里呢&#xff0c;那么應該就是要讓…

Java參數校驗詳解:使用@Valid注解和自定義注解進行參數驗證

很多時候我們需要使用不少if、else等等邏輯判斷及驗證&#xff0c;這樣在進行一些重復的參數校驗會很麻煩&#xff0c;且以后要維護也會吃力。 而這樣就可以使用javax.validation。驗證&#xff08;Validation&#xff09;常見的驗證操作包括驗證數據的類型、格式、長度、范圍、…

我想漲工資,請問測試開發該怎么入門?

我是測試開發工程師!歡迎和我交流測試領域相關問題&#xff08;測試入門、技術、python交流都可以&#xff09; 我幾乎是靠這套方法&#xff0c;從一個只會功能測試的小白&#xff0c;到成為測試開發工程師的。 別急&#xff0c;先慢慢看&#xff0c;只要按照下面的流程走一遍…

postcss-pxtorem實現頁面自適應的原理

先聲明一點這玩意本身不能實現哈&#xff0c;他只是一個工具&#xff0c;更是一個postcss的插件 幫助我們從px轉化成為rem比如我們的代碼 div {height: 100px;width: 100px; }經過這個插件轉化之后變成 假設變成下面這樣哈 div {height: 1rem;width: 1rem; }其他沒啥子太大作…

P1046 [NOIP2005 普及組] 陶陶摘蘋果題解

題目 陶陶家的院子里有一棵蘋果樹&#xff0c;每到秋天樹上就會結出 1010 個蘋果。蘋果成熟的時候&#xff0c;陶陶就會跑去摘蘋果。陶陶有個 3030 厘米高的板凳&#xff0c;當她不能直接用手摘到蘋果的時候&#xff0c;就會踩到板凳上再試試。 現在已知 1010 個蘋果到地面的…