1、问题描述:

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

2、思路分析:

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

(2)代码结构:

class LianjiaSpider(object):

    def __init__(self):

    def getMaxPage(self, url): # 获取maxPage

    def parsePage(self, url): # 解析每个page,获取每个huose的Link

    def 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()函数

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

def getMaxPage(self, url):
response = requests.get(url, headers = self.headers)
if response.status_code == 200:
source = response.text
soup = 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 maxPage
else:
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>,而我们只需要第一个,所以用find
detail = 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").text
detail["单价"] = soup.find("span", class_ = "unitPriceValue").text
detail["小区"] = soup.find("div", class_ = "communityName").find("a", class_ = "info").text
detail["位置"] = soup.find("div", class_="areaName").find("span", class_="info").text
detail["地铁"] = soup.find("div", class_="areaName").find("a", class_="supplement").text
base = 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 detail
else:
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、完整代码:

# -* coding: utf-8 *-
#author: wangshx6
#data: 2018-11-07
#descriptinon: 爬取链家深圳全部二手房的详细信息,并将爬取的数据存储到CSV文 import requests
from bs4 import BeautifulSoup
import pandas as pd
from fake_useragent import UserAgent 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.text
soup = 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 maxPage
else:
print("Fail status: {}".format(response.status_code))
return None 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>,而我们只需要第一个,所以用find
detail = 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").text
detail["单价"] = soup.find("span", class_ = "unitPriceValue").text
detail["小区"] = soup.find("div", class_ = "communityName").find("a", class_ = "info").text
detail["位置"] = soup.find("div", class_="areaName").find("span", class_="info").text
detail["地铁"] = soup.find("div", class_="areaName").find("a", class_="supplement").text
base = 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 detail
else:
return None if __name__ == "__main__":
Lianjia = LianjiaSpider()
Lianjia.parsePage("https://sz.lianjia.com/ershoufang/")

python爬虫:爬取链家深圳全部二手房的详细信息的更多相关文章

  1. python爬虫:利用BeautifulSoup爬取链家深圳二手房首页的详细信息

    1.问题描述: 爬取链家深圳二手房的详细信息,并将爬取的数据存储到Excel表 2.思路分析: 发送请求--获取数据--解析数据--存储数据 1.目标网址:https://sz.lianjia.com ...

  2. Python——Scrapy爬取链家网站所有房源信息

    用scrapy爬取链家全国以上房源分类的信息: 路径: items.py # -*- coding: utf-8 -*- # Define here the models for your scrap ...

  3. Python爬虫项目--爬取链家热门城市新房

    本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途) 环境 win8, python 3.7, pycharm 正文 1. 目标网站分析 通过分析, 找出相关url, 确 ...

  4. Python的scrapy之爬取链家网房价信息并保存到本地

    因为有在北京租房的打算,于是上网浏览了一下链家网站的房价,想将他们爬取下来,并保存到本地. 先看链家网的源码..房价信息 都保存在 ul 下的li 里面 ​ 爬虫结构: ​ 其中封装了一个数据库处理模 ...

  5. 【nodejs 爬虫】使用 puppeteer 爬取链家房价信息

    使用 puppeteer 爬取链家房价信息 目录 使用 puppeteer 爬取链家房价信息 页面结构 爬虫库 pupeteer 库 实现 打开待爬页面 遍历区级页面 方法一 方法二 遍历街道页面 遍 ...

  6. Python爬取链家二手房源信息

    爬取链家网站二手房房源信息,第一次做,仅供参考,要用scrapy.   import scrapy,pypinyin,requests import bs4 from ..items import L ...

  7. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  8. Scrapy实战篇(一)之爬取链家网成交房源数据(上)

    今天,我们就以链家网南京地区为例,来学习爬取链家网的成交房源数据. 这里推荐使用火狐浏览器,并且安装firebug和firepath两款插件,你会发现,这两款插件会给我们后续的数据提取带来很大的方便. ...

  9. 用Python爬虫爬取广州大学教务系统的成绩(内网访问)

    用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...

随机推荐

  1. 保存及读取keras模型参数

    转自:http://blog.csdn.net/u010159842/article/details/54407745,感谢分享~ 你可以使用model.save(filepath)将Keras模型和 ...

  2. PHP接口对方(C#)接收不到数据?ContentLength=-1

    工作时遇到的问题.浏览器可以查看到json数据,但是对方死活收不到数据. 最后发现发现ContentLength=-1. 找到问题:为什么.NET程序下载获得的ContentLength=-1? 摘抄 ...

  3. Win8 Pro 64 Install .net3.5 在线升级会遇到错误0x800F0906。

    很多人安装Win8后都遇到了无法升级.NET Framework 3.5.1的问题,在线升级会遇到错误0x800F0906. Uninstall Windows update kB: KB296682 ...

  4. elenium2学习(十六)-- 富文本(自动发帖)

    前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...

  5. 3.Zabbix 3.0 部署

    请查看我的有道云笔记: http://note.youdao.com/noteshare?id=0139b8d2833129740be82e36a94e4fca&sub=5931260FCC8 ...

  6. 初识Git与Github

    学习和使用Git和Github的确是一件很有意义的事,通过使用Git和Github,可以让我们很方便地管理自己的各种文件,还可以帮助一名程序员更好地用于代码管理.而对于一名软件技术人员,建立自己的Gi ...

  7. [转]Ubuntu桌面入门指南

    Ubuntu桌面入门指南 http://wiki.ubuntu.org.cn/Ubuntu%E6%A1%8C%E9%9D%A2%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97

  8. MySQL:数据库入门篇5

    1.存储引擎 innodb与MyIASM存储引擎的区别: 1.innodb 是mysql5.5版本以后的默认存储引擎, 而MyISAM是5.5版本以前的默认存储引擎. 2.innodb 支持事物,而M ...

  9. 显示Windows版本号

    实现效果: 知识运用: PaintDesktopVersion键 实现代码: private void button1_Click(object sender, EventArgs e) { Regi ...

  10. hibermate一对一关联

    在hibernate.cfg.xml配置<mapping class="oneToOne.IDCard" />,以及实体类的get和set方法省略了. User类 @E ...