欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用爬蟲爬取貴陽房價的方法詳解

 更新時間:2022年02月11日 10:29:15   作者:是夢吧,是你吧!  
這篇文章主要為大家詳細(xì)介紹了Python爬蟲爬取貴陽房價的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1 序言

1.1 生存壓力帶來的哲思

馬爾薩斯最早發(fā)現(xiàn),生物按照幾何級數(shù)高度增殖的天賦能力,總是大于他們的實際生存能力或現(xiàn)實生存群量,依次推想,生物的種內(nèi)競爭一定是極端殘酷且無可避免。姑且不論馬爾薩斯是否有必要給人類提出相應(yīng)的警告,僅是這一現(xiàn)象中隱含的一系列基礎(chǔ)問題,譬如,生物的超量繁殖能力的自然限度何在?種內(nèi)競爭的幸存者依靠什么優(yōu)勢來取勝?以及這些所謂的優(yōu)勢群體如何將自己引向何方?等等,就足以引起任何一位有思想的人不能不怵然(恐懼)深思。

后來,達(dá)爾文在他的那部劃時代的《物種起源》一書的緒論中,特意提及馬爾薩斯學(xué)說的科學(xué)貢獻(xiàn)和啟迪作用,可見要成為那個馬老教士的知音,并不是一般人夠資格的!

1.2 買房&房奴

現(xiàn)在結(jié)婚,女方一般要求男方有房有車,其實也不能怪人家女孩子,在社會社會高度發(fā)展、動蕩的今天,這個要求確實不高。奈何改革開放以來,階級固化,吾輩難矣!先看看貴陽房價(鏈家新房:https://gy.fang.lianjia.com/

不能被時代淘汰了,不能總唉聲嘆氣的,白手起家的的大資本家寥寥無幾,人家劉強(qiáng)東就是一個。偶像歸偶像,回到現(xiàn)實中來吧,農(nóng)村孩子,可能買了房,就可能是一輩子的房奴,回到農(nóng)村,表面光鮮亮麗的被別人崇拜著,心里的苦和委屈只有自己知道。鑒于此,我個人不想做房奴車奴,快樂是自己的,生活是自己的,活出自己的精彩,不是活給別人看的,我想讓自己命運的旖旎風(fēng)景絢麗多姿,現(xiàn)階段要做的是提升自己能力,不想做房奴!

心血澎湃,感嘆完了,該回到今天的主題。何不把這些數(shù)據(jù)弄到一個文檔表格里面分析分析,說干就干,就用爬蟲爬取吧,然后寫入文檔。

2 爬蟲 

2.1 基本概念

網(wǎng)絡(luò)爬蟲(Crawler):又稱網(wǎng)絡(luò)蜘蛛,或者網(wǎng)絡(luò)機(jī)器人(Robots). 它是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。換句話來說,它可以根據(jù)網(wǎng)頁的鏈接地址自動獲取網(wǎng)頁內(nèi)容。如果把互聯(lián)網(wǎng)比做一個大蜘蛛網(wǎng),它里面有許許多多的網(wǎng)頁,網(wǎng)絡(luò)蜘蛛可以獲取所有網(wǎng)頁的內(nèi)容。

爬蟲是一個模擬人類請求網(wǎng)站行為, 并批量下載網(wǎng)站資源的一種程序或自動化腳本。

  • 爬蟲:使用任何技術(shù)手段,批量獲取網(wǎng)站信息的一種方式。關(guān)鍵在于批量。
  • 反爬蟲:使用任何技術(shù)手段,阻止別人批量獲取自己網(wǎng)站信息的一種方式。關(guān)鍵也在于批量。
  • 誤傷:在反爬蟲的過程中,錯誤的將普通用戶識別為爬蟲。誤傷率高的反爬蟲策略,效果再好也不能用。
  • 攔截:成功地阻止爬蟲訪問。這里會有攔截率的概念。通常來說,攔截率越高的反爬蟲策略,誤傷的可能性就越高。因此需要做個權(quán)衡。
  • 資源:機(jī)器成本與人力成本的總和。

2.2 爬蟲的基本流程 

(1)請求網(wǎng)頁:通過 HTTP 庫向目標(biāo)站點發(fā)起請求,即發(fā)送一個 Request,請求可以包含額外的 headers 等
信息,等待服務(wù)器響應(yīng)!

(2)獲得相應(yīng)內(nèi)容:如果服務(wù)器能正常響應(yīng),會得到一個 Response,Response 的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能有 HTML,Json 字符串,二進(jìn)制數(shù)據(jù)(如圖片視頻)等類型。

(3)解析內(nèi)容:得到的內(nèi)容可能是 HTML,可以用正則表達(dá)式、網(wǎng)頁解析庫進(jìn)行解析。可能是 Json,可以
直接轉(zhuǎn)為 Json 對象解析,可能是二進(jìn)制數(shù)據(jù),可以做保存或者進(jìn)一步的處理。

(4)存儲解析的數(shù)據(jù):保存形式多樣,可以存為文本,也可以保存至數(shù)據(jù)庫,或者保存特定格式的文件

測試案例:代碼 實現(xiàn): 爬取貴陽房價的頁面數(shù)據(jù)

#==========導(dǎo) 包=============
import requests
#=====step_1 : 指 定 url=========
url = 'https://gy.fang.lianjia.com/ /'
#=====step_2 : 發(fā) 起 請 求 :======
#使 用 get 方 法 發(fā) 起 get 請 求 , 該 方 法 會 返 回 一 個 響 應(yīng) 對 象 。 參 數(shù) url 表 示 請 求 對 應(yīng) 的 url
response = requests . get ( url = url )
#=====step_3 : 獲 取 響 應(yīng) 數(shù) 據(jù) :===
#通 過 調(diào) 用 響 應(yīng) 對 象 的 text 屬 性 , 返 回 響 應(yīng) 對 象 中 存 儲 的 字 符 串 形 式 的 響 應(yīng) 數(shù) 據(jù) ( 頁 面 源 碼數(shù) 據(jù) )
page_text = response . text
#====step_4 : 持 久 化 存 儲=======
with open ('貴陽房價 . html ','w', encoding ='utf -8') as fp:
    fp.write ( page_text )
print (' 爬 取 數(shù) 據(jù) 完 畢 !!!')

爬 取 數(shù) 據(jù) 完 畢 !!!
Process finished with exit code 0

3 爬取貴陽房價并寫入表格

3.1 結(jié)果展示

3.2 代碼實現(xiàn)(Python) 

#==================導(dǎo)入相關(guān)庫==================================
from bs4 import BeautifulSoup
import numpy as np
import requests
from requests.exceptions import  RequestException
import pandas as pd
#=============讀取網(wǎng)頁=========================================
def craw(url,page):
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
        html1 = requests.request("GET", url, headers=headers,timeout=10)
        html1.encoding ='utf-8' # 加編碼,重要!轉(zhuǎn)換為字符串編碼,read()得到的是byte格式的
        html=html1.text
        return html
    except RequestException:#其他問題
        print('第{0}讀取網(wǎng)頁失敗'.format(page))
        return None
#==========解析網(wǎng)頁并保存數(shù)據(jù)到表格======================
def pase_page(url,page):
    html=craw(url,page)
    html = str(html)
    if html is not None:
        soup = BeautifulSoup(html, 'lxml')
        "--先確定房子信息,即li標(biāo)簽列表--"
        houses=soup.select('.resblock-list-wrapper li')#房子列表
        "--再確定每個房子的信息--"
        for j in range(len(houses)):#遍歷每一個房子
            house=houses[j]
            "名字"
            recommend_project=house.select('.resblock-name a.name')
            recommend_project=[i.get_text()for i in recommend_project]#名字 英華天元,斌鑫江南御府...
            recommend_project=' '.join(recommend_project)
            #print(recommend_project)
            "類型"
            house_type=house.select('.resblock-name span.resblock-type')
            house_type=[i.get_text()for i in house_type]#寫字樓,底商...
            house_type=' '.join(house_type)
            #print(house_type)
            "銷售狀態(tài)"
            sale_status = house.select('.resblock-name span.sale-status')
            sale_status=[i.get_text()for i in sale_status]#在售,在售,售罄,在售...
            sale_status=' '.join(sale_status)
            #print(sale_status)
            "大地址"
            big_address=house.select('.resblock-location span')
            big_address=[i.get_text()for i in big_address]#
            big_address=''.join(big_address)
            #print(big_address)
            "具體地址"
            small_address=house.select('.resblock-location a')
            small_address=[i.get_text()for i in small_address]#
            small_address=' '.join(small_address)
            #print(small_address)
            "優(yōu)勢。"
            advantage=house.select('.resblock-tag span')
            advantage=[i.get_text()for i in advantage]#
            advantage=' '.join(advantage)
            #print(advantage)
            "均價:多少1平"
            average_price=house.select('.resblock-price .main-price .number')
            average_price=[i.get_text()for i in average_price]#16000,25000,價格待定..
            average_price=' '.join(average_price)
            #print(average_price)
            "總價,單位萬"
            total_price=house.select('.resblock-price .second')
            total_price=[i.get_text()for i in total_price]#總價400萬/套,總價100萬/套'...
            total_price=' '.join(total_price)
            #print(total_price)
            #=====================寫入表格=================================================
            information = [recommend_project, house_type, sale_status,big_address,small_address,advantage,average_price,total_price]
            information = np.array(information)
            information = information.reshape(-1, 8)
            information = pd.DataFrame(information, columns=['名稱', '類型', '銷售狀態(tài)','大地址','具體地址','優(yōu)勢','均價','總價'])
            information.to_csv('貴陽房價.csv', mode='a+', index=False, header=False)  # mode='a+'追加寫入
        print('第{0}頁存儲數(shù)據(jù)成功'.format(page))
    else:
        print('解析失敗')
#==================雙線程=====================================
import threading
for i  in range(1,100,2):#遍歷網(wǎng)頁1-101
    url1="https://gy.fang.lianjia.com/loupan/pg"+str(i)+"/"
    url2 = "https://gy.fang.lianjia.com/loupan/pg" + str(i+1) + "/"
    t1 = threading.Thread(target=pase_page, args=(url1,i))#線程1
    t2 = threading.Thread(target=pase_page, args=(url2,i+1))#線程2
    t1.start()
    t2.start()v

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!     

相關(guān)文章

  • 教你如何使用Python快速爬取需要的數(shù)據(jù)

    教你如何使用Python快速爬取需要的數(shù)據(jù)

    學(xué)點數(shù)據(jù)爬蟲基礎(chǔ)能讓繁瑣的數(shù)據(jù)CV工作(Ctrl+C,Ctrl+V)成為自動化就足夠了.作為一名數(shù)據(jù)分析師而并非開發(fā)工程師,需要掌握的爬蟲必備的知識內(nèi)容,能獲取需要的數(shù)據(jù)即可 ,需要的朋友可以參考下
    2021-06-06
  • python里 super類的工作原理詳解

    python里 super類的工作原理詳解

    這篇文章主要介紹了python里 super類的工作原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python應(yīng)用實現(xiàn)雙指數(shù)函數(shù)及擬合代碼實例

    Python應(yīng)用實現(xiàn)雙指數(shù)函數(shù)及擬合代碼實例

    這篇文章主要介紹了Python應(yīng)用實現(xiàn)雙指數(shù)函數(shù)及擬合代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python遍歷某目錄下的所有文件夾與文件路徑

    Python遍歷某目錄下的所有文件夾與文件路徑

    這篇文章主要介紹了Python遍歷某目錄下的所有文件夾與文件路徑 以及輸出中文亂碼問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 最新評論