Python爬取链家房价信息

时间:2024-12-09 19:58:36

房子问题近些年来越来越受到大家的关注,要了解近些年的房价,首先就要获取网上的房价信息,我们以链家网上出售的房价信息为例,将数据爬取下来并存储起来。

这次信息的爬取我们依然采取requests-Beautiful Soup的线路来爬取链家网上的出售房的信息。需要安装好anaconda,并保证系统中已经有requests库,Beautiful Soup4库和csv库已经安装。


网页分析

我们要爬取的网页如下,我们需要的信息有房子的名称和价格

/ershoufang/ 

如下图:


下面我们来分析我们所要提取的信息的位置,打开开发者模式查找元素,我们找到房子的名称和价格;如下图:


我们可以看到我们所需要的房子名称的信息在{div class="title"}里面,价格信息在{div class="totalPrice"}里面,所有的信息都封装在li标签里面。

我们分析了一个网页里面的网页结构,要爬取其他网页的信息还要看到更多的结构;

第一个网页链接:/ershoufang/pg1

第二个网页链接:/ershoufang/pg2

第三个网页链接:/ershoufang/pg3

每页的链接都以pg+某页数字结尾,我们以此发现规律。


程序结构

接下来我们来编写程序的主体结构:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv
  4. def getHTMLText(url): #获取网页信息
  5. return ""
  6. def get_data(list,html): #获取数据并存储下来
  7. def main():
  8. start_url = "/ershoufang/pg"
  9. depth = 20
  10. info_list = []
  11. for i in range(depth):
  12. url = start_url + str(i)
  13. html = getHTMLText(url)
  14. get_data(info_list,html)
  15. main()

根据各个函数的目的,来填充函数的具体内容,第一个函数要获取网页信息:

  1. def getHTMLText(url):
  2. try:
  3. r = (url)
  4. r.raise_for_status()
  5. = r.apparent_encoding
  6. return
  7. except:
  8. return "产生异常"

第二个函数是要获取数据并存储在文件中;

  1. def get_data(list,html):
  2. soup = BeautifulSoup(html,'')
  3. infos = ('ul',{'class':'sellListContent'}).find_all('li') #找到所有的li标签
  4. with open(r'/Users/11641/Desktop/','a',encoding='utf-8') as f: #创建一个的文件并写入
  5. for info in infos:
  6. name = ('div',{'class':'title'}).find('a').get_text()
  7. price =('div',{'class':'priceInfo'}).find('div',{'class','totalPrice'}).find('span').get_text()
  8. ("{},{}\n".format(name,price))

上面我们就写完了这个爬虫程序

但是要注意的是:运行完成的程序以csv文件保存下来,如果直接用excel打开可能会有乱码现象,一般用如下步骤解决:

  1. 用记事本打开文件,另存为选择编码为:ANSI,存储文件;
  2. 将存储的新文件用excel打开,另存为excel文件格式,就可永久存储文件

我们来看一下文件存储的效果,如下图:


程序代码

上面我们成功的写完了链家二手房爬虫的代码,并成功输出了我们大致所要的结果,全部代码如下;

  1. #爬取链家二手房信息
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import csv
  5. def getHTMLText(url):
  6. try:
  7. r = (url,timeout=30)
  8. r.raise_for_status()
  9. = r.apparent_encoding
  10. return
  11. except:
  12. return '产生异常'
  13. def get_data(list,html):
  14. soup = BeautifulSoup(html,'')
  15. infos = ('ul',{'class':'sellListContent'}).find_all('li')
  16. with open(r'/Users/11641/Desktop/','a',encoding='utf-8') as f:
  17. for info in infos:
  18. name = ('div',{'class':'title'}).find('a').get_text()
  19. price =('div',{'class':'priceInfo'}).find('div',{'class','totalPrice'}).find('span').get_text()
  20. ("{},{}\n".format(name,price))
  21. def main():
  22. start_url = '/ershoufang/pg'
  23. depth = 20
  24. info_list =[]
  25. for i in range(depth):
  26. url = start_url + str(i)
  27. html = getHTMLText(url)
  28. get_data(info_list,html)
  29. main()

总结:

1.爬虫主要用requests库和Beautiful Soup库可以简明地爬取网页上的信息;

2.先定好程序主要框架,再根据目的需求填充函数内容:获取网页信息>爬取网页数据>存储数据;

3.对于所有的信息存储于多页,要观察网页信息,构造每页的url链接来解决;

4.最重要的是解析网页结构,最好可以用标签树的形式确定字段所在的标签,并遍历全部标签存储数据。


本人学习的python也不太久,文章中有些理解和书写错误,还望大家理解和之处,谢谢!
另外,强烈推荐北京理工大学嵩天老师的python系列课程。
更多关于本人的信息请访问本人网站 /(目前处于申请维护状态)