1、问题描述:

爬取链家深圳全部二手房的详细信息,并将爬取的数据存储到CSV文件中

2、思路分析:

(1)目标网址:https://sz.lianjia.com/ershoufang/

(2)代码结构:

class LianjiaSpider(object):def __init__(self):def getMaxPage(self, url): # 获取maxPagedef parsePage(self, url): # 解析每个page,获取每个huose的Linkdef parseDetail(self, url): # 根据Link,获取每个house的详细信息

(3) init(self)初始化函数

  • hearders用到了fake_useragent库,用来随机生成请求头。
  • datas空列表,用于保存爬取的数据。
def __init__(self):self.headers = {"User-Agent": UserAgent().random}self.datas = list()

(4) getMaxPage()函数

主要用来获取二手房页面的最大页数.

'''
遇到不懂的问题?Python学习交流群:1136201545满足你的需求,资料都已经上传群文件,可以自行下载!
'''
def getMaxPage(self, url):response = requests.get(url, headers = self.headers)if response.status_code == 200:source = response.textsoup = BeautifulSoup(source, "html.parser")pageData = soup.find("div", class_ = "page-box house-lst-page-box")["page-data"]# pageData = '{"totalPage":100,"curPage":1}',通过eval()函数把字符串转换为字典maxPage = eval(pageData)["totalPage"]return  maxPageelse:print("Fail status: {}".format(response.status_code))return None

(5)parsePage()函数
主要是用来进行翻页的操作,得到每一页的所有二手房的Links链接。它通过利用一个for循环来重构 url实现翻页操作,而循环最大页数就是通过上面的 getMaxPage() 来获取到。

def parsePage(self, url):maxPage = self.getMaxPage(url)#  解析每个page,获取每个二手房的链接for pageNum in range(1, maxPage+1 ):url = "https://sz.lianjia.com/ershoufang/pg{}/".format(pageNum)print("当前正在爬取: {}".format(url))response = requests.get(url, headers = self.headers)soup = BeautifulSoup(response.text, "html.parser")links = soup.find_all("div", class_ = "info clear")for i in links:link = i.find("a")["href"]    #每个<info clear>标签有很多<a>,而我们只需要第一个,所以用finddetail = self.parseDetail(link)self.datas.append(detail)

(6)parseDetail()函数
根据parsePage()函数获取的二手房Link链接,向该链接发送请求,获取出详细页面信息。

def parseDetail(self, url):response = requests.get(url, headers = self.headers)detail = {}if response.status_code == 200:soup = BeautifulSoup(response.text, "html.parser")detail["价格"] = soup.find("span", class_ = "total").textdetail["单价"] = soup.find("span", class_ = "unitPriceValue").textdetail["小区"] = soup.find("div", class_ = "communityName").find("a", class_ = "info").textdetail["位置"] = soup.find("div", class_="areaName").find("span", class_="info").textdetail["地铁"] = soup.find("div", class_="areaName").find("a", class_="supplement").textbase = soup.find("div", class_ = "base").find_all("li") # 基本信息detail["户型"] = base[0].text[4:]detail["面积"] = base[2].text[4:]detail["朝向"] = base[6].text[4:]detail["电梯"] = base[10].text[4:]return detailelse:return None

(7)将数据存储到CSV文件中
这里用到了 pandas 库的 DataFrame() 方法,它默认的是按照列名的字典顺序排序的。想要自定义列的顺序,可以加columns字段。

    #  将所有爬取的二手房数据存储到csv文件中data = pd.DataFrame(self.datas)# columns字段:自定义列的顺序(DataFrame默认按列名的字典序排序)columns = ["小区", "户型", "面积", "价格", "单价", "朝向", "电梯", "位置", "地铁"]data.to_csv(".\Lianjia_II.csv", encoding='utf_8_sig', index=False, columns=columns)

3、效果展示

4、完整代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd
from fake_useragent import UserAgent
'''
遇到不懂的问题?Python学习交流群:1136201545满足你的需求,资料都已经上传群文件,可以自行下载!
'''
class LianjiaSpider(object):def __init__(self):self.headers = {"User-Agent": UserAgent().random}self.datas = list()def getMaxPage(self, url):response = requests.get(url, headers = self.headers)if response.status_code == 200:source = response.textsoup = BeautifulSoup(source, "html.parser")pageData = soup.find("div", class_ = "page-box house-lst-page-box")["page-data"]# pageData = '{"totalPage":100,"curPage":1}',通过eval()函数把字符串转换为字典maxPage = eval(pageData)["totalPage"]return  maxPageelse:print("Fail status: {}".format(response.status_code))return Nonedef parsePage(self, url):maxPage = self.getMaxPage(url)#  解析每个page,获取每个二手房的链接for pageNum in range(1, maxPage+1 ):url = "https://sz.lianjia.com/ershoufang/pg{}/".format(pageNum)print("当前正在爬取: {}".format(url))response = requests.get(url, headers = self.headers)soup = BeautifulSoup(response.text, "html.parser")links = soup.find_all("div", class_ = "info clear")for i in links:link = i.find("a")["href"]    #每个<info clear>标签有很多<a>,而我们只需要第一个,所以用finddetail = self.parseDetail(link)self.datas.append(detail)#  将所有爬取的二手房数据存储到csv文件中data = pd.DataFrame(self.datas)# columns字段:自定义列的顺序(DataFrame默认按列名的字典序排序)columns = ["小区", "户型", "面积", "价格", "单价", "朝向", "电梯", "位置", "地铁"]data.to_csv(".\Lianjia_II.csv", encoding='utf_8_sig', index=False, columns=columns)def parseDetail(self, url):response = requests.get(url, headers = self.headers)detail = {}if response.status_code == 200:soup = BeautifulSoup(response.text, "html.parser")detail["价格"] = soup.find("span", class_ = "total").textdetail["单价"] = soup.find("span", class_ = "unitPriceValue").textdetail["小区"] = soup.find("div", class_ = "communityName").find("a", class_ = "info").textdetail["位置"] = soup.find("div", class_="areaName").find("span", class_="info").textdetail["地铁"] = soup.find("div", class_="areaName").find("a", class_="supplement").textbase = soup.find("div", class_ = "base").find_all("li") # 基本信息detail["户型"] = base[0].text[4:]detail["面积"] = base[2].text[4:]detail["朝向"] = base[6].text[4:]detail["电梯"] = base[10].text[4:]return detailelse:return Noneif __name__ == "__main__":Lianjia = LianjiaSpider()Lianjia.parsePage("https://sz.lianjia.com/ershoufang/")

python爬取链家深圳全部二手房的详细信息相关推荐

  1. python爬房源信息_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  2. python 爬取链家数据_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  3. Python爬取链家网获取二手房数据并调用高德api获得经纬度

    链家网获得数据地址,高德api获得经纬度(同理链家网也可以换成其他58同城,赶集网的数据,因为反爬虫比较厉害,没时间整,就用链家网的数据先试试水) 首先爬链家网,Info包含一条信息 import j ...

  4. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  5. python爬取链家网的房屋数据

    python爬取链家网的房屋数据 爬取内容 爬取源网站 爬取内容 爬取思路 爬取的数据 代码 获取房屋url 获取房屋具体信息 爬取内容 爬取源网站 北京二手房 https://bj.lianjia. ...

  6. 五十七、爬取链家网北京二手房信息,并进行线性回归建模

    @Author : By Runsen @Date:2020/5/31 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严 ...

  7. python爬取链家新房_Python爬虫实战:爬取链家网二手房数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 买房装修,是每个人都要经历的重要事情之一.相对于新房交易市场来说,如今的二手房交易市场一点也 ...

  8. 租房不入坑不进坑,Python爬取链家二手房的数据,提前了解租房信息

    目录 前言 一.查找数据所在位置: 二.确定数据存放位置: 三.获取html数据: 四.解析html,提取有用数据: 前言 贫穷限制了我的想象,从大学进入到社会这么久,从刚开始的兴致勃勃,觉得钱有什么 ...

  9. python爬取链家新房数据_Python爬虫实战:爬取链家网二手房数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 买房装修,是每个人都要经历的重要事情之一.相对于新房交易市场来说,如今的二手房交易市场一点也 ...

  10. Python爬取链家地产二手房信息

    """ 1.爬取链家地产二手房信息 要求:使用代理进行爬取:59.58.151.34:3879 步骤:1.找URL第一页:https://yichang.lianjia. ...

最新文章

  1. winsock setsockopt 详解
  2. 深入redis内部之redis启动过程之二
  3. RetrieveFavicon 获取任何站点的 favicon
  4. Build 2019:微软正式宣布 .NET 5
  5. div 背景图 居中
  6. Ajax 调用webservice 解决跨域请求和发布到服务器后本地调用成功外网失败的问题...
  7. ansj 自定义 停用词_构造自定义停用词列表的快速提示
  8. 三菱plc控制步进电机实例_电工进阶PLC工程师!必学步进电机的编程控制指令,你掌握了吗...
  9. android5.0 输入法提取,搜狗手机输入法5.0 Android新版使用体验
  10. linux结合阿里云企业邮箱配置mailx
  11. java utility 是什么_Java Utility类代码示例
  12. systemd man手册
  13. php htmlpurifier,htmlpurifierPHP过滤库
  14. 10个人用的云服务器要什么配置文件,10个人用的云服务器要什么配置文件
  15. gallery3d的源码分析——入口
  16. 动画项目中问题及解决方案(V客学院知识分享)
  17. 7-8 最佳情侣身高差(10 分)
  18. C语言小函数——atol(自己实现)
  19. Boosted Cascaded Convnets for Multilabel Classification of Thoracic Diseases in Chest Radiographs翻译
  20. 如何在Github上为开源贡献力量?

热门文章

  1. 基于Apache APISIX,新浪微博API网关的定制化开发之路
  2. C/C++存储区域划分(栈区,堆区,全局区,代码区)
  3. pytorch:自定义损失函数total variation loss
  4. 多线程编程实例(使用CompletableFuture)
  5. 化工原理少学时答案解析_化工原理(少学时)题库 及答案
  6. 代码坏味道与重构之数据泥团和基本类型偏执
  7. 10个程序员实用但偏执的 Java 编程技巧
  8. 微信小程序授权文件放到域名根目录下
  9. 2020年阿里巴巴校招面试题及答案持续更新中~~~
  10. 【Mybatis】动态SQL之choose标签