Python 高级应用程序设计任务

一.主题式网络爬虫设计方案

1.主题式网络爬虫的名称

1.1链家网站的爬取

2,主题式网络爬虫的内容与数据特征分析

2.1爬虫的内容

房源信息的名称,小区名称,价格,楼层,代理人,单价,发布时间。

2.2 数据特征分析

2.2.1对楼层做一个词云并可视化

2.2.2对发布时间做一个折线图

3,主题式网络爬虫设计方案概述(包括实现思路和技术难点)

3.1实现思路

创建一个get的类,定义get_alldata()方法用来获取网页上的全部信息,get_detail()方法用来对整数数据的进一步加工和提取,再用字典把数据存储起来。

3.2技术难点

 网站会有反爬取机制,需要模拟用户操作进行爬取。

二,主题页面的结构特征分析

1,主题页面的特征结构

每页30项数据,爬取了50页,数据量为1500条。通过F12查看网页源代码分析需要提取的数据是否存在动态生成的数据,任意查看一个数据项中与原网页中的数据对比后,发现所需要爬取的数据都是静态的。

2,HTML页面解析

方框内都是要爬取的内容

三,网络爬虫程序设计

1,爬虫程序主题要包括以下部分,要附源代码及较详解注释,并在每部分程序后面提供输出结果的截图。

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import pandas as pd
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
import seaborn as sns
#固定url
url_title = "https://sh.lianjia.com/chengjiao/pg"
url_end = "/"
Total_Data = {}
#获取全部的网址信息
class Get:
#获取所有url
def get_url(self):
list1 = []
#取50个
for i in range(0,51):
url = url_title+str(i)+url_end#拼接参数得到完整的url
list1.append(url)
return list1

#解析出网页
def get_alldata(self,url):
#user_agent = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36‘
#headers = {‘User-Agent‘: user_agent}
#data = requests.get(url,headers=headers)
data = requests.get(url)
soup = BeautifulSoup(data.text,‘lxml‘)
return soup
#获取title等,并存入字典
def get_detail(self,soup):
for i in range(0,30):
data1 = soup.select(‘div[class="info"]‘)[i]
house_title =data1.find_all("div",class_="title")
house_flood =data1.find_all("div",class_="flood")
house_dealCycleeInfo = data1.find_all("div",class_="dealCycleeInfo")
house_agentInfoList = data1.find_all("div",class_="agentInfoList")

data = {
‘Title‘:house_title[0].get_text(),
‘flood‘:house_flood[0].get_text(),
‘dealCycleeInfo‘:house_dealCycleeInfo[0].get_text(),
‘agentInfoList‘:house_agentInfoList[0].get_text(),

}
Total_Data[data["Title"]] = data
return Total_Data

House_data = Get()
House_url =House_data.get_url()
for house_item in House_url:
house_soup= House_data.get_alldata(house_item)
data = House_data.get_detail(house_soup)

df_house = pd.DataFrame.from_dict(data)
df_house = df_house.T#转置
df_house.index=range(len(df_house))#reindex

#====================================================
#数据清洗
df_house[‘agent‘]=df_house[‘agentInfoList‘].apply(lambda x:x.split("免费")[0])
del df_house[‘agentInfoList‘]
df_house[‘price‘] = df_house[‘dealCycleeInfo‘].apply(lambda x:x.split("成交")[0]).apply(lambda x:x.split("挂牌")[1])
df_house[‘time‘] = df_house[‘dealCycleeInfo‘].apply(lambda x:x.split("成交")[-1]).apply(lambda x:x.split("周期")[-1])
del df_house[‘dealCycleeInfo‘]
df_house[‘floor‘]=df_house[‘flood‘].apply(lambda x:x.split(‘ ‘)[0])
df_house[‘floor‘]=df_house[‘flood‘].apply(lambda x:x.split(‘ ‘)[0])
df_house[‘unitprice‘]=df_house[‘flood‘].apply(lambda x:x.split(‘ ‘)[-1]).apply(lambda x:x.split("楼")[-1])
del df_house[‘flood‘]
df_house[‘time‘]=df_house[‘time‘].apply(lambda x:x.split("天")[0])
writer = pd.ExcelWriter(r‘C:\Users\DATACVG\Desktop\1100\lianjiasale.xlsx‘)
df_house.to_excel(r‘C:\Users\DATACVG\Desktop\1100\lianjiasale.xlsx‘)

#词云
cut_text = "".join(df_house[‘floor‘])
wordcloud = WordCloud(
#设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
font_path="C:/Windows/Fonts/simfang.ttf",
#设置了背景,宽高
background_color="white",width=1000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show() 

cut_text = "".join(df_house[‘agent‘])
wordcloud = WordCloud(
#设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
font_path="C:/Windows/Fonts/simfang.ttf",
#设置了背景,宽高
background_color="white",width=1000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

#=================================================
#数据可视化
#柱状图
s =df_house[‘time‘].value_counts()
sns.barplot(x=s.index,y=s)

  

运行过程如下

数据清洗

df_house[‘agent‘]=df_house[‘agentInfoList‘].apply(lambda x:x.split("免费")[0])
del df_house[‘agentInfoList‘]
df_house[‘price‘] = df_house[‘dealCycleeInfo‘].apply(lambda x:x.split("成交")[0]).apply(lambda x:x.split("挂牌")[1])
df_house[‘time‘] = df_house[‘dealCycleeInfo‘].apply(lambda x:x.split("成交")[-1]).apply(lambda x:x.split("周期")[-1])
del df_house[‘dealCycleeInfo‘]
df_house[‘floor‘]=df_house[‘flood‘].apply(lambda x:x.split(‘ ‘)[0])
df_house[‘floor‘]=df_house[‘flood‘].apply(lambda x:x.split(‘ ‘)[0])
df_house[‘unitprice‘]=df_house[‘flood‘].apply(lambda x:x.split(‘ ‘)[-1]).apply(lambda x:x.split("楼")[-1])
del df_house[‘flood‘]
df_house[‘time‘]=df_house[‘time‘].apply(lambda x:x.split("天")[0])
writer = pd.ExcelWriter(r‘C:\Users\DATACVG\Desktop\1100\lianjiasale.xlsx‘)
df_house.to_excel(r‘C:\Users\DATACVG\Desktop\1100\lianjiasale.xlsx‘)

#词云
cut_text = "".join(df_house[‘fitment‘])
wordcloud = WordCloud(
#设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
font_path="C:/Windows/Fonts/simfang.ttf",
#设置了背景,宽高
background_color="white",width=1000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show() 

cut_text = "".join(df_house[‘roomnum‘])
wordcloud = WordCloud(
#设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
font_path="C:/Windows/Fonts/simfang.ttf",
#设置了背景,宽高
background_color="white",width=1000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

#=================================================
#数据可视化
#柱状图
s =df_house[‘follow‘].value_counts()
sns.barplot(x=s.index,y=s)

 #3.文本分析(可选):jieba分词、wordcloud可视化
#4.数据分析与可视化
(例如:数据柱形图、直方图、散点图、盒图、分布图、数据回归分析等)

#词云
cut_text = "".join(df_house[‘floor‘])
wordcloud = WordCloud(
#设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的
font_path="C:/Windows/Fonts/simfang.ttf",
#设置了背景,宽高
background_color="white",width=1000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show() 

#=================================================
#数据可视化
#柱状图
s =df_house[‘time‘].value_counts()
sns.barplot(x=s.index,y=s)

  

5.数据持久化

写入csv文件

四、结论(10分)
1.经过对主题数据的分析与可视化,可以得到哪些结论?

  1.1 单价低的房子更容易卖出。

1.2代理人对房子的销售影响很大

1.3 人们跟倾向于中层的房子

本次作业,对爬虫和数据分析做了个整合,将所学的知识都有用上,感觉很好,期待自己的每一次进步。

原文地址:https://www.cnblogs.com/liyuchen44/p/12046419.html

时间: 2024-08-30 15:32:56

Python 高级应用程序设计任务的相关文章

Python高级应用程序设计

Python高级应用程序设计任务要求 用Python实现一个面向主题的网络爬虫程序,并完成以下内容:(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台) 一.主题式网络爬虫设计方案(15分) 1.主题式网络爬虫名称 名称:爬取视频网站中的电影排名信息2.主题式网络爬虫爬取的内容与数据特征分析 本次爬虫主要爬取各个视频网站中的电影排名以及评分3.主题式网络爬虫设计方案概述(包括实现思路与技术难点) 本次设计方案主要依靠request库对目标页面进行信息的爬取采集,再用Beauti

Python高级应用程序设计任务

Python高级应用程序设计任务要求 用Python实现一个面向主题的网络爬虫程序,并完成以下内容:(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台) 一.主题式网络爬虫设计方案(15分) 1.主题式网络爬虫名称 新浪微博热点话题爬虫.2.主题式网络爬虫爬取的内容与数据特征分析 爬取新浪热点话题跟阅读量.3.主题式网络爬虫设计方案概述(包括实现思路与技术难点) 先爬取页面的HTML,然后使用正则表达式爬取话题跟阅读量,再存在文件中. 二.主题页面的结构特征分析(15分)1.主

Python高级应用程序设计任务要求

1.案例内容简介 易车网新车信息的爬取 内容步骤: 爬取,解析(动态requests+ajax/selenium),清洗,持久化(mysql),可视化(seaborn) 2.案例分析与设计 (1) 系统框架 整个框架分为六个模块:爬虫调度器.URL管理器.HTML下载器.HTML解析器.数据存储器.数据可视化 (2) 数据库设计 用于记录奥迪汽车信息 表ad_data id Int 自增主键 name Varchar(255) 汽车名称 time_to_market Varchar(255) 上

Python高级应用程序设计任务要求(主题链家二手车)

内容简介 链家二手房成交信息(福州) 本文主要使用了multiprocessing模块创建多个进程对象,使用Queue将多个进程联系在一起,也就是线程之间的通信多个对链家的二手房进行数据的爬取,处理,存储等操作. 结构:主从模式: 主控制节点 从爬虫节点 分析与设计 系统主要核心有两大调度器 1.控制调度器 主要负责管理三个进程:一:负责将地址传递给爬虫节点,二:负责读取爬虫节点返回的数据,三:负责将数据提取进程中提交的数据进行数据持久化 2.爬虫调度器 爬虫节点主要是包括两个功能,下载html

三.python高级

三.python高级 1.元类 1.1 Python 中类方法.类实例方法.静态方法有何区别? 类方法:是类对象的方法,在定义时需要在上方使用@classmethod进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用: 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为 self,指代对象本身: 静态方法:是一个任意函数,在其上方使用@staticmethod进行装饰,可以用对象直接调用, 静态方法实际上跟该类没有太大关系 2.内存管理与垃圾回收机制 2.1 Python

面试题--python高级

第三章Python 高级 一.元类 1.Python 中类方法.类实例方法.静态方法有何区别?(2018-3-30-lxy) 类方法:是类对象的方法,在定义时需要在上方使用"@classmethod"进行装饰,形参为cls, 表示类对象,类对象和实例对象都可调用: 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为self,指代对象本身: 静态方法:是一个任意函数,在其上方使用"@staticmethod"进行装饰,可以用对象直接调用, 静态方法实际上跟

python高级编程之(类级):子类内建类型

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #类级 #在2.2中,提出了类型(type0与类(class)统一(请访问:https://www.python.org/download/releases/2.2.3/descintro(可能已经不存在了))-这使内建类型的子类化成为可能,并且添加一个新内建类型object #用于所有内建类的公共祖先 #展示一个名为distinctdict类的代码,与平常的dic

51CTO学院Python高级自动化开发工程师微职位学员自我介绍

51CTO学院Python高级自动化开发工程师微职位 自我介绍及学习宣言 亲爱的小伙伴:欢迎大家报名51CTO学院&老男孩Alex Python高级自动化开发工程师微职位学习,跟随alex.武sir学习屌炸天的python技术,成就技术大牛之梦.为了督促大家一直积极认真努力的学习,请各位同学在跟帖写出你的自我介绍.学习宣言,不忘初心,一直跟着老师一步一个脚印,扎扎实实学本领. 跟帖格式:我是xxx,我参加了51CTO学院&老男孩Alex Python高级自动化开发工程师微职位学习,从201

python高级编程:有用的设计模式2

# -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一个代价昂贵或者远程的资源提供了一个非直接访问的机制 在客户和主意之间,如图.它用来优化对高代价主题的访问,比如,在前一章中描述的memoize装饰器可以被认为是一个代理 ,它还可以用提供到一个主题智能访问,例如,大的视频文件可以封闭在代理中,以避免在用户仅仅请教其标题时就将文件载入到内存中 urllib2出给