Python基础——爬虫以及简单的数据分析!入门非常简单!

目标:使用Python编写爬虫,获取链家青岛站的房产信息,然后对爬取的房产信息进行分析。

环境:win10+python3.8+pycharm

Python库:

1 import requests
2 import bs4
3 from bs4 import BeautifulSoup
4 import lxml
5 import re
6 import xlrd
7 import xlwt
8 import xlutils.copy
9 import time

目标分析:

1、编写爬虫爬取链家青岛站的房产信息

①分析目标链接

第一页:https://qd.fang.lianjia.com/loupan/pg/pg1

第二页:https://qd.fang.lianjia.com/loupan/pg/pg2

由上面的链接可以看出来,不同网页是使用最后的pgx来进行变化的

所以将链接分为两部分,使用字符串拼接获得所有的房产网页链接

1   WebDiZhi = []
2     for i in range(1,85):
3         UrlHTML = Url + str(i)
4         WebDiZhi.append(UrlHTML)

使用遍历获得所有的链接并保存为列表

②分析网页结构

 

 1 #获取目标网页的html代码并进行解析
 2     Xu = 0
 3     Shuliang = len(WebDiZhi)
 4     while Xu in range(Shuliang):#循环整个列表
 5 
 6         Web = requests.get(WebDiZhi[Xu])
 7         WebText = Web.text
 8 
 9         #第一步、粗筛选目标信息所在的html代码,去除大部分无效信息代码
10         soup_One = BeautifulSoup(WebText,'html.parser')
11         XinXi_One = soup_One.find_all(class_="resblock-list-wrapper")
12 
13         #第二步、进一步筛选目标信息所在html代码,去除无效信息代码
14         soup_Two = BeautifulSoup(str(XinXi_One),'lxml')
15         XinXi_Two = soup_Two.find_all(class_="resblock-desc-wrapper")

通过两步简单的筛选将房产信息所对应的html代码筛选出来

方便进一步分析html网页标签获取不同的房产信息

③针对不同的房产信息定义不同的函数,通过调用函数来获取不同的房产信息并保存到目标文件中

 

 1  print("-----------------开始写入第{}页-------------".format(Xu))
 2         Name = GetName(XinXi_Two)  # 获取小区名称
 3         Write_File(Name, 0,Xu)
 4         print("---------小区名称写入成功---------")
 5         time.sleep(3)  #延时
 6         Nature = NatureHouse(XinXi_Two)  # 获取小区住宅性质(住宅、商业性)
 7         Write_File(Nature, 1,Xu)
 8         print("---------小区性质写入成功---------")
 9         time.sleep(3)
10         Status = StatusHouse(XinXi_Two)  # 获取小区状态(在售)
11         Write_File(Status, 2,Xu)
12         print("---------小区状态写入成功---------")
13         time.sleep(3)
14         Address = AddressHouse(XinXi_Two)  # 获取小区地址
15         Write_File(Address, 3,Xu)
16         print("---------小区地址写入成功---------")
17         time.sleep(3)
18         Area = AreaHouse(XinXi_Two)  # 获取小区房屋面积
19         Write_File(Area, 4,Xu)
20         print("---------小区面积写入成功---------")
21         time.sleep(3)
22         Average = AveragePriceHouse(XinXi_Two)  # 均价
23         Write_File(Average, 5,Xu)
24         print("---------小区均价写入成功---------")
25         time.sleep(3)
26         Total = TotalPriceHouse(XinXi_Two)  # 总价
27         Write_File(Total, 6,Xu)
28         print("---------小区总价写入成功---------")
29         time.sleep(3)

各房产信息函数

  1 def Write_File(Data, lei,Hang):
  2     data = xlrd.open_workbook(r"F:\实例\Python实例\爬虫\111.xls")
  3     ws = xlutils.copy.copy(data)
  4     table = ws.get_sheet(0)
  5     Shu = Hang * 10
  6     for i in range(len(Data)):
  7         table.write(i + 1 + Shu, lei, Data[i])
  8         print("----第{}项写入成功----".format(i))
  9         ws.save(r"F:\实例\Python实例\爬虫\111.xls")
 10 
 11 
 12 def GetName(XinXi):
 13     """
 14     @param XinXi: 传入GetHTML函数第二步中筛选出的div标签下的html代码以及目标信息
 15     @return: 返回小区名称,列表类型
 16     """
 17     Nmae_list = []
 18     # 获取小区名称
 19     Obtain_Name_One = BeautifulSoup(str(XinXi), 'lxml')
 20     Name_One = Obtain_Name_One.findAll(class_="name")
 21     for i in Name_One:
 22         Get_A = BeautifulSoup(str(i), 'lxml')
 23         Nmae_list.append(Get_A.string)
 24     return Nmae_list
 25 
 26 """
 27 代码以及目标信息均已获取,通过不同函数将html代码在对应函数中逐一进行解析获取函数对应信息并保存即可
 28 以下为部分函数,其他函数未定义
 29 
 30 """
 31 def NatureHouse(Nature):
 32     """房屋性质"""
 33     Nature_list = []
 34     Obtain_Nature = BeautifulSoup(str(Nature), 'lxml')
 35     Nature_one = Obtain_Nature.find_all(class_='resblock-type')
 36     for i in Nature_one:
 37         Get_Span = BeautifulSoup(str(i), 'lxml')
 38         Nature_list.append(Get_Span.string)
 39     return Nature_list
 40 
 41 def StatusHouse(Status):
 42     """房屋状态"""
 43     Status_list = []
 44     Obtain_Nature = BeautifulSoup(str(Status), 'lxml')
 45     Status_one = Obtain_Nature.find_all(class_='sale-status')
 46     for i in Status_one:
 47         Get_Span = BeautifulSoup(str(i), 'lxml')
 48         Status_list.append(Get_Span.string)
 49     return Status_list
 50 
 51 def AddressHouse(Area):
 52     """
 53 
 54 
 55     @param Area:传入GetHTML函数第二步中筛选出的div标签下的html代码以及目标信息
 56     @return:
 57     Analysis_Label_xxx:分析标签,xxx:代表第几次分析
 58     Target_Information_xxx:目标信息,xxx:代表第几个信息部分,总共分为两部分,以及一个整体信息存储列表Target_Information_list
 59     """
 60     #获取标签
 61     Target_Information_list = []
 62     Analysis_Label_One = BeautifulSoup(str(Area), 'lxml')
 63     # 获取div标签,calss=resblock-location
 64     Get_label_One = Analysis_Label_One.find_all(class_='resblock-location')
 65     #解析标签并获得span标签
 66     Analysis_Label_Two = BeautifulSoup(str(Get_label_One), 'lxml')
 67     Get_label_Two = Analysis_Label_Two.find_all(name='span')
 68 
 69 
 70     #获取span标签里面的文字内容并保存在列表内
 71 
 72     #第一个
 73     Target_Information_One = []
 74     for i in Get_label_Two:
 75         #使用正则表达式取出内部信息并保存在列表中
 76         Information_Str = re.sub(r'<.*?>','',str(i))
 77         Target_Information_One.append(Information_Str)
 78     #将列表内相同小区的地址进行合并,使用循环嵌套获取内容、合并最后保存在列表内
 79     i = 1
 80     a = 0
 81 
 82     #第二个,第二个信息是在第一个信息的基础上合并列表内的元素得来
 83     Target_Inform
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值