說起python爬蟲,相信大家都覺得很神奇,為什麼python爬蟲叫做網絡蜘蛛,對於這一點,相信大家一定覺得高大神奇,其實爬蟲技術這個過程很無聊,但是獲取到想要的結果的時候就很開心,那麼今天大家就跟隨我的腳步進入爬蟲的技術領域,話不多說,我們頭條號只講乾貨!
那麼今天就帶領大家去爬取安居客這個網站的一些房產數據,今天我們爬取的是關於寫字樓的六項數據,那麼首先我會一步一步講解程序的每一步實現的作用,最後會附上完整代碼,大家可以拿去自己進行實驗,不懂的地方歡迎下方留言或者私信我都可以,有時間就回復!
安居客北京寫字樓六項數據爬取
安居客的北京寫字樓鏈接:
https://bj.sydc.anjuke.com/xzl-zu/?from=navigation
具體的代碼塊以及每一塊的作用會在下面詳細說明:
# 輸入相應的庫文件 # requests庫用於對網站發送請求,請求成功網站會返回給我們一個響應值 import requests # BeautifulSoup庫從bs4模塊導入,用於對網站的響應值進行解析 from bs4 import BeautifulSoup # csv庫用於把爬取的文件放進csv文件內 import csv # time庫有很多用法,這裡是用來防止反爬機制 import time # 由於網站信息頁面有很多頁數,我們這裡設置爬取100頁 urls = ['https://bj.sydc.anjuke.com/xzl-zu/p{}/'.format(number)for number in range(1, 101)] # 假如請求頭,模擬瀏覽器登錄請求,防止被封ip地址 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/' '537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} # 打開名為:大北京.csv的文件,先給第一行加一些名字['標題', '地址', '日租價格', '月租價格', '樓層特點', '面積'] with open('大北京.csv', 'a', newline='', encoding='utf-8-sig') as csvfile: w = csv.writer(csvfile) w.writerow(['標題', '地址', '日租價格', '月租價格', '樓層特點', '面積']) # 由於有很多頁面,每一個頁面都有相應的鏈接,這裡設置循環按順序爬取每一個網頁 for url in urls: # 對網站發送請求 wb_data = requests.get(url, headers=headers) # 對返回的響應體進行解析 soup = BeautifulSoup(wb_data.text, "lxml") # 用select函數抽取需要的內容,單擊需要的內容》檢查》copy select titles = soup.select("#list-content > div > dl > dt > span") # 在解析後的文檔中查找標題 addresses = soup.select("#list-content > div > dl > dd.address > span:nth-child(2)") # 地址 dprices = soup.select("#list-content > div > div.item-price > div.price-a > em") # 日租價格 mprices = soup.select("#list-content > div > div.item-price > div.price-b > em") # 月租價格 lous = soup.select("#list-content > div > dl > dd:nth-child(2) > span:nth-child(3)") # 樓層屬性 areas = soup.select("#list-content > div > dl > dd:nth-child(2) > span:nth-child(1)") # 面積大小 # 進一步獲取我們想要的數據 for title, address, dprice, area, lou, mprice in zip(titles, addresses, dprices, areas, lous, mprices): # 建立空列表,分配存儲地址 data = [] dprice = dprice.text, # 價格直接獲取裡面的文本就可以,兩邊是標籤 dprice = dprice[0]+"元/m²•天" mprice = mprice.text, # 價格直接獲取裡面的文本就可以,兩邊是標籤 mprice = mprice[0]+"元/月" title = title.text.strip(), # 獲得文本並去除掉文本兩側的不必要的字符,用strip() title = title[0] address = address.text.strip('[]') # 同樣地址也是去除兩頭不必要的字符串 area = area.text.strip("平米"), area = area[0]+"m²" # 獲取面積 lou = lou.text, data = [title, address, dprice, mprice, lou, area] # 將以上數據放入列表中打印在命令框 print(data) # 打開文件大北京.csv,並循環地將數據寫入其中,with open是自動關閉的函數 with open('大北京.csv', 'a', newline='', encoding='utf-8-sig') as csvfile: w = csv.writer(csvfile) w.writerow(data) time.sleep(5)
以上就是所有的代碼塊,最終會保存在本地文檔的.csv文件裡面,文字繁多,一個人打字比較操勞,如果有可能我會開直播給大家教學,謝謝支持與關注,您的支持與關注是我進行下去的動力!