在使用tableau进行学习的过程中发现,一些比较偏市场的数据没有一个较好的获取途径,以便我们分析一些较为有用的数据。因此第一步,我们先进行数据的爬取。
1. python环境和脚本
本次想要分析的为 深圳2019年6月份在售新盘的数据,因此我们先找到数据的源网站,官方的网站数据分布比较散落,因此决定使用咚咚找房的哈哈。
比如某个新盘的价格列表如 http://bol.szhome.com/baj/8727.html
这里先看一下response中是否有页面显示的内容,发现这个网页是没有的,那我们就不能在response中根据位置来得到数据。
翻一页,看一下数据是怎样返回的,根据返回的json数据可以看出是jquery返回的数据,构造数据只需要看一下翻页请求中的url和参数规律即可。
响应中的json数据,以此来获得数据。。
2. 编写脚本并跑一跑
爬取数据的脚本如下,jquery类的数据都可以用下面的改一下请求和接收的返回数据就可以了。
#coding:utf-8
import requests
from urllib.parse import urlencode
import json
def parse_ajax_web(pageindex,teda):
url = 'http://bol.szhome.com/Project/GetBolBaList/'
parm = {
'page': pageindex,
'pageSize': 20,
'id': '45153-1-0-0',
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36",
"Referer": "http://bol.szhome.com/baj/5917.html",
'x-Requested-with': 'XMLHttpRequest',
'Origin': 'http://bol.szhome.com',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'Hm_lvt_9a7b16ce65b422c3a2b3f1d30d705175=1561875931; Hm_lpvt_9a7b16ce65b422c3a2b3f1d30d705175=1561875931; Hm_lvt_c26237ea59fbcd4df5bf21d4e0b85a64=1561876924; Hm_lpvt_c26237ea59fbcd4df5bf21d4e0b85a64=1561907011',
'Content-Length': '33',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Connection': 'keep-alive',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
response = requests.post(url, headers=headers,data=urlencode(parm))
if response.status_code == 200:
json = response.json()
data = json.get('list')
for item in data:
if item.get('XMMC') is not None:
linedata = item.get('XMMC')+","+item.get('LD')+ ","+item.get('ZH')+ ","+item.get('JZMJ')+ ","+item.get('LC')+ ","+item.get('FH')+ ","+item.get('BAJ') +"\n"
teda.write(linedata)
def main():
with open("D:/data.txt",'w') as teda:
for pageindex in (range(1,95)):
parse_ajax_web(pageindex,teda)
if __name__ == '__main__':
main()
3、得到数据并分析
按照上述脚本分别爬取其他楼盘的数据,汇总后导入tablau中