您好,登錄后才能下訂單哦!
作為一個活躍在京津冀地區的開發者,要閑著沒事就看看石家莊
這個國際化大都市的一些數據,這篇博客爬取了鏈家網的租房信息,爬取到的數據在后面的博客中可以作為一些數據分析的素材。
我們需要爬取的網址為:https://sjz.lianjia.com/zufang/
首先確定一下,哪些數據是我們需要的
可以看到,×××框就是我們需要的數據。
接下來,確定一下翻頁規律
https://sjz.lianjia.com/zufang/pg1/
https://sjz.lianjia.com/zufang/pg2/
https://sjz.lianjia.com/zufang/pg3/
https://sjz.lianjia.com/zufang/pg4/
https://sjz.lianjia.com/zufang/pg5/
...
https://sjz.lianjia.com/zufang/pg80/
Python資源分享qun 784758214 ,內有安裝包,PDF,學習視頻,這里是Python學習者的聚集地,零基礎,進階,都歡迎
有了分頁地址,就可以快速把鏈接拼接完畢,我們采用lxml
模塊解析網頁源碼,獲取想要的數據。
本次編碼使用了一個新的模塊 fake_useragent
,這個模塊,可以隨機的去獲取一個UA(user-agent),模塊使用比較簡單,可以去百度百度就很多教程。
本篇博客主要使用的是調用一個隨機的UA
self._ua = UserAgent()
self._headers = {"User-Agent": self._ua.random} # 調用一個隨機的UA
由于可以快速的把頁碼拼接出來,所以采用協程進行抓取,寫入csv文件采用的pandas
模塊
from fake_useragent import UserAgent
from lxml import etree
import asyncio
import aiohttp
import pandas as pd
class LianjiaSpider(object):
def __init__(self):
self._ua = UserAgent()
self._headers = {"User-Agent": self._ua.random}
self._data = list()
async def get(self,url):
async with aiohttp.ClientSession() as session:
try:
async with session.get(url,headers=self._headers,timeout=3) as resp:
if resp.status==200:
result = await resp.text()
return result
except Exception as e:
print(e.args)
async def parse_html(self):
for page in range(1,77):
url = "https://sjz.lianjia.com/zufang/pg{}/".format(page)
print("正在爬取{}".format(url))
html = await self.get(url) # 獲取網頁內容
html = etree.HTML(html) # 解析網頁
self.parse_page(html) # 匹配我們想要的數據
print("正在存儲數據....")
######################### 數據寫入
data = pd.DataFrame(self._data)
data.to_csv("鏈家網租房數據.csv", encoding='utf_8_sig') # 寫入文件
######################### 數據寫入
def run(self):
loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(self.parse_html())]
loop.run_until_complete(asyncio.wait(tasks))
if __name__ == '__main__':
l = LianjiaSpider()
l.run()
上述代碼中缺少一個解析網頁的函數,我們接下來把他補全
def parse_page(self,html):
info_panel = html.xpath("http://div[@class='info-panel']")
for info in info_panel:
region = self.remove_space(info.xpath(".//span[@class='region']/text()"))
zone = self.remove_space(info.xpath(".//span[@class='zone']/span/text()"))
meters = self.remove_space(info.xpath(".//span[@class='meters']/text()"))
where = self.remove_space(info.xpath(".//div[@class='where']/span[4]/text()"))
con = info.xpath(".//div[@class='con']/text()")
floor = con[0] # 樓層
type = con[1] # 樣式
agent = info.xpath(".//div[@class='con']/a/text()")[0]
has = info.xpath(".//div[@class='left agency']//text()")
price = info.xpath(".//div[@class='price']/span/text()")[0]
price_pre = info.xpath(".//div[@class='price-pre']/text()")[0]
look_num = info.xpath(".//div[@class='square']//span[@class='num']/text()")[0]
one_data = {
"region":region,
"zone":zone,
"meters":meters,
"where":where,
"louceng":floor,
"type":type,
"xiaoshou":agent,
"has":has,
"price":price,
"price_pre":price_pre,
"num":look_num
}
self._data.append(one_data) # 添加數據
Python資源分享qun 784758214 ,內有安裝包,PDF,學習視頻,這里是Python學習者的聚集地,零基礎,進階,都歡迎
不一會,數據就爬取的差不多了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。