基於python實現安居客資料抓取

2022-08-11 08:54:10 字數 3660 閱讀 4389

安居客,抓資料

資料來源:

使用方法:利用python,結合selenium、beautifulsoup庫

開發工具:pycharm

完整**:

#

beautifulsoup用於網頁解析

from bs4 import

beautifulsoup

#webdriver調出來乙個瀏覽器,模仿人進行真實操作

from selenium import

webdriver

#pandas建立dataframe

import

pandas as pd

#指明chromedriver所在位置

chrome_driver = "

"driver = webdriver.chrome(executable_path=chrome_driver)

#指明要爬取的網頁(因為要翻頁,所以末尾暫時寫p)

request_url = '

p'#對字串資料進行格式化處理,去掉換行和空格

defformat_str(str):

return str.replace('

\n', '').replace('

', '')#

使用pandas構建dataframe,表示最後生成資料的表結構

houses =pd.dataframe(

columns=['

city

', '

communityname

', '

address

', '

completiondate

', '

houseprice

', '

thanlastmonth

', '

networkaddress'])

#翻頁3次,獲取資料

for i in range(3):

#資料翻頁url位址會改變,p1 p2 p3

url = request_url + str(i + 1)

#chrome瀏覽器驅動獲取url位址並開啟

driver.get(url)

#獲取html頁面

html = driver.find_element_by_xpath("

//*").get_attribute("

outerhtml")

#beautifulsoup對html頁面進行解析

soup = beautifulsoup(html, '

html.parser

', from_encoding='

utf-8')

#獲取城市名字,等下要寫入資料**中

city = soup.find('

span

', class_='

tit'

).em.text.strip()

#獲取所有符合要求的資料條,每一條資料都包含自身很多資訊

house_list = soup.find_all('

div', class_='

li-itemmod')

#迴圈實現來獲取每一條完整資料中,指定要爬取的資料

for house in

house_list:

#建立空字典,等下要把爬取到的資料對應著寫進去

temp ={}

#獲取小區名稱

communityname = house.find('

div', class_='

li-info

').h3.a.text.strip()

#獲取此房所在位址

address = house.find('

div', class_='

li-info

').address.text.strip()

#獲取房子竣工日期

completiondate = house.find('

div', class_='

li-info

').find('

p', class_='

date

').text.strip()

#因為li-side下方有兩個同級p標籤,用列表獲取下面的houseprice和thanlastmonth更合適

list = house.find('

div', class_='

li-side

').find_all('p'

)

#獲取房子**(單價)

houseprice =list[0].text.strip()

#獲取環比上月漲跌幅

thanlastmonth = list[1].text.strip()

#獲取此房詳細頁面**

networkaddress = house.a.get('

href

').strip()

#將獲取到的資料放入到字典中(因為每個頁面城市都是一樣的,所以在頁面迴圈時已經拿到資料)

temp['

city

'] =format_str(city)

temp[

'communityname

'] =format_str(communityname)

temp[

'address

'] =format_str(address)

temp[

'completiondate

'] =format_str(completiondate)

temp[

'houseprice

'] =format_str(houseprice)

temp[

'thanlastmonth

'] =format_str(thanlastmonth)

temp[

'networkaddress

'] =format_str(networkaddress)

#將每一條封好的資料新增到dataframe中

#dataframe資料以csv格式進行輸出

#引數列表中加入index=false, encoding='utf_8_sig'解決中文亂碼問題

houses.to_csv('

anjukebeijing.csv

', index=false, encoding='

utf_8_sig

')

抓取結果:

注意事項:

2.翻頁抓取資料時,頁面url位址會改變,可以使url位址末尾數字逐漸加1來實現翻頁

3.字串格式化處理時,去掉換行、英文空格就可以了,已滿足格式化處理要求

4.獲取房價和環比上月漲跌幅時,可以考慮先獲取兩個p標籤的集合,再獲取指定資料,可以避免bug出現

5.dataframe資料以csv格式進行輸出時,引數列表中加入index=false, encoding='utf_8_sig'可以解決csv檔案中文亂碼問題

Python爬取安居客經紀人資訊

python2.7.15 今天我們來爬取安居客經紀人的資訊。這次我們不再使用正則,我們使用beautifulsoup。不了解的可以先看一下這個文件,便於理解。for page in range 1,8 url str page response urllib2.urlopen url content...

python日曆教程 基於python實現簡單日曆

首先要理清楚邏輯,日曆的難點在於如何使用基礎知識將周幾與對應的日期進行對應,我這裡利用了1917年1月1日為星期1,計算累計到我們要查詢的月份的天數來確定所查詢月份的第一天為週幾.輸出日曆介面 print 50 print 歡迎使用 天天日曆 v2.0 接收使用者輸入的年份 year int int...

Python 基於Python實現批量建立目錄

基於python實現批量建立目錄 by 授客qq 1033553122 測試環境 python 版本 python 2.7 實踐 usr bin env python coding utf 8 author shouke import os class publictools def init se...