原链接:用Python爬虫爬取链家网上的房源信息_shayebuhui_a的博客-CSDN博客_python爬取链家

打开链家网页:https://sh.lianjia.com/zufang/  :用F12以页面中元素进行检查,点击左上角的小箭头,得到相关信息。在这个页面可以通过将鼠标悬浮在相关信息上,可以得到其源代码

我们可以发现网页中包含浦东-川沙-园西小区的源代码为:

<a target="_blank" href="/zufang/pudong/">浦东</a>
<a href="/zufang/jinqiao/" target="_blank">川沙</a>
<a title="园西小区" href="/zufang/c5011000007323/" target="_blank">园西小区</a>

使用正则表达式获取网页信息的语句可以写为:

#区域
findplace1 = re.compile(r'<a href="/zufang/.*" target="_blank">(.*)</a>-<a href="/zufang/.* target="_blank">.*</a>-<a href="/zufang.*" target="_blank" title=".*">.*</a>')  #创建正则表达式对象,表示规则(字符串的模式)findplace2= re.compile(r'<a href="/zufang/.*" target="_blank">.*</a>-<a href="/zufang/.* target="_blank">(.*)</a>-<a href="/zufang.*" target="_blank" title=".*">.*</a>')findplace3 = re.compile(r'<a href="/zufang/.*" target="_blank">.*</a>-<a href="/zufang/.* target="_blank">.*</a>-<a href="/zufang.*" target="_blank" title=".*">(.*)</a>')

依照此方法可以得到所有想要的数据

二 解析数据

原文中解析使用的库为bs4 但bs4需要翻墙才能下,这里提供一个链接

python下载安装BeautifulSoup库 - 淼淼之森 - 博客园 (cnblogs.com) 可以用

解析数据是我们首先需要分配一块用于暂存数据的空间datalist ,然后就是对获取到的资源进行解析。这里我们再定义一个 data 用来存储解析出来的数据。我们解析的是HTML格式,所以我们使用的是html.parser,然后使用find_all函数查找符合的字符串,这里我们需要注意的就是要将我们查找的item条目转换成字符串格式,否则无法识别。使用re库通过正则表达式查找到指定的字符串后,运用data.append语句将字符串加入到data中。

三 储存数据

将网页爬的数据储存下来,接着把数据存入excel,定义函数,然后创建workbook对象和工作表,然后在工作表中创建前面爬取的条目,再向表中写入数据即可。

四 伪装

多次爬取时可能会被网站禁止,因此我们需要给我们的爬虫做一下伪装,比如加一个网页头,假装我们是网页。

综合代码如下:

import re  # 正则表达式,进行文字匹配
from bs4 import BeautifulSoup  # 网页解析,获取数据
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作# 区域
findplace1 = re.compile(r'<a href="/zufang/.*" target="_blank">(.*)</a>-<a href="/zufang/.* target="_blank">.*</a>-<a href="/zufang.*" target="_blank" title=".*">.*</a>')  # 创建正则表达式对象,表示规则(字符串的模式)findplace2 = re.compile(r'<a href="/zufang/.*" target="_blank">.*</a>-<a href="/zufang/.* target="_blank">(.*)</a>-<a href="/zufang.*" target="_blank" title=".*">.*</a>')# 房子大小
finddaxiao = re.compile(r'<i>/</i>(.*)<i>/</i>.*<i>/</i>.*<span class="hide">', re.S)  # re.s让换行符包含在字符中
# 房子朝向
findfangxiang = re.compile(r'<i>/</i>.*<i>/</i>(.*)<i>/</i>.*<span class="hide">', re.S)
# 房子规格
findguige = re.compile(r'<i>/</i>.*<i>/</i>.*<i>/</i>(.*)<span class="hide">', re.S)
# 楼层类型
findleixing = re.compile(r'<p class="content__list--item--des">.*<i>/</i>(.*)</span>.*</p>.*<p class="content__list--item--bottom oneline">',re.S)
# 是否靠近地铁
findsubway = re.compile(r'<i class="content__item__tag--is_subway_house">(.*)</i>')
# 是否是精装
finddecoration = re.compile(r'<i class="content__item__tag--decoration">(.*)</i>')
# 是否可以随时看房
findkey = re.compile(r'<i class="content__item__tag--is_key">(.*)</i>')
# 是否是新上的
findnew = re.compile(r'<i class="content__item__tag--is_new">(.*)</i>')
# 维护时间
findtime = re.compile(r'<span class="content__list--item--time oneline">(.*)</span>')
# 平均租金
findmoney = re.compile(r'<span class="content__list--item-price"><em>(.*)</em>')baseurl = "https://sh.lianjia.com/zufang/"def getData(baseurl):  # 调用获取页面信息的函数datalist = []  # 分配暂存的空间for i in range(0, 100):url = baseurl + str(i)html = askURL(url)  # 保存获取到的网页源码# 逐一解析数据(边获取边解析)soup = BeautifulSoup(html, "html.parser")  # html.parser是html的解析器for item in soup.find_all('div', class_="content__list--item"):  # 查找符合要求的字符串,形成列表# print(item) #测试:查看链家item全部信息data = []item = str(item)  # 转换成字符串,否则无法识别# 链家详情链接place1 = re.findall(findplace1, item)[0]  # re库用来通过正则表达式查找指定的字符串place2 = re.findall(findplace2, item)[0]place = place1 + '-' + place2data.append(place)  # 添加地址daxiao = re.findall(finddaxiao, item)[0]daxiao = daxiao.strip()data.append(daxiao.replace("㎡", ""))  # 添加房子大小(平米)并替换前后空格fangxiang = re.findall(findfangxiang, item)[0]data.append(fangxiang.replace(" ", ""))  # 添加房子朝向并替换空格guige = re.findall(findguige, item)[0]data.append(guige.replace(" ", ""))  # 添加房子户型并替换空格leixing1 = re.findall(findleixing, item)[0]leixing2 = leixing1.strip()  # 去掉前后空格leixing3 = leixing2.replace(" ", "")  # 将空格替换掉data.append(leixing3[0:3])  # 添加房子楼层类型并替换空格data.append(leixing3[4:8].replace("层)", ""))  # 添加房子层数并替换掉()subway = re.findall(findsubway, item)  # 可能写有靠近地铁if (len(subway)) != 0:subway = subway[0]data.append(subway)  # 添加近地铁else:data.append("不靠近地铁")  # 添加不靠近地铁decoration = re.findall(finddecoration, item)if len(decoration) != 0:decoration = decoration[0]data.append(decoration)  # 添加精装else:data.append("不是精装")  # 添加不是精装key = re.findall(findkey, item)if len(key) != 0:key = key[0]data.append(key)  # 添加随时看房else:data.append("不是随时看房")  # 添加不是随时看房new = re.findall(findnew, item)if len(new) != 0:new = new[0]data.append(new)  # 添加新上else:data.append("不是新上")  # 添加不是新上time = re.findall(findtime, item)[0]data.append(time)  # 添加维护时间money = re.findall(findmoney, item)[0]data.append(money)  # 添加平均租金(元/月)datalist.append(data)  # 将data中的数据放入datalist中return datalistdef askURL(url):head = {  # 模拟浏览器头部信息,向链家服务器发送消息"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}# 用户代理,表示告诉链家服务器,我们是什么类型的机器,浏览器(本质上是爬虫)request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")# print(html)    测试用的except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html# 保存数据  输入区域和户型,输出该区域和户型的平均租金
def saveData(datalist, savepath):print("save...")book = xlwt.Workbook(encoding="utf-8", style_compression=0)  # 创建workbook对象sheet = book.add_sheet('链家租房信息', cell_overwrite_ok=True)  # 创建工作表col = ("区域", "房子大小", "房子朝向", "户型", "楼层类型", "楼层数", "是否靠近地铁", "是否是精装", "是否可以随时看房", "是否是新上的", "维护时间", "平均租金")for i in range(0, 12):sheet.write(0, i, col[i])  # 列名for i in range(0, 3000):print("第%d条" % (i + 1))data = datalist[i]for j in range(0, 12):sheet.write(i + 1, j, data[j])  # 数据book.save('shuju.xls')def xxx():datalist = getData(baseurl)saveData(datalist, savepath='shuju.xls')xxx()

运行结果:

在原链接中,代码里并没有调用函数,需要自己调用。

Python爬虫爬取链家网上的房源信息练习相关推荐

  1. Python爬取链家网上的房源信息

    import re # 正则表达式,进行文字匹配 from bs4 import BeautifulSoup # 网页解析,获取数据 import urllib.request, urllib.err ...

  2. python爬虫--爬取链家租房信息

    python 爬虫-链家租房信息 爬虫,其实就是爬取web页面上的信息. 链家租房信息页面如下: https://gz.lianjia.com/zufang/ ## python库 Python库 1 ...

  3. python爬虫爬取链家网房价信息

    打开链家网页:https://sh.lianjia.com/zufang/  :用F12以页面中元素进行检查 <a target="_blank" href="/z ...

  4. python爬虫代码房-python爬虫爬取链家二手房信息

    #coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...

  5. python爬虫——使用bs4爬取链家网的房源信息

    1. 先看效果 2. 进入链家网,这里我选择的是海口市点击跳转到链家网 3. 先看网页的结构,这些房子的信息都在li标签,而li标签再ul标签,所以怎么做大家都懂 4. 代码如下,url的链接大家可以 ...

  6. python爬虫---爬取链家新房

    import re import requests import redis from lxml import etree from fake_useragent import UserAgent i ...

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

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

  8. 基于python多线程和Scrapy爬取链家网房价成交信息

    文章目录 知识背景 Scrapy- spider 爬虫框架 SQLite数据库 python多线程 爬取流程详解 爬取房价信息 封装数据库类,方便多线程操作 数据库插入操作 构建爬虫爬取数据 基于百度 ...

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

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

最新文章

  1. 刚刚入手一台G11,发短信是老是出现“发送自HTC手机”字样
  2. spring3.0注解
  3. STM32 基础系列教程 33 - Lwip_tcp_client
  4. UNIX网络编程——select函数的并发限制和 poll 函数应用举例
  5. mysql索引引擎_mysql搜索引擎和索引那些事
  6. SAGAN生成更为精细的人脸图像(tensorflow实现)
  7. 计算机考研需要看数据库吗,05报考华中科技计算机系数据库所的我复试经历
  8. 德鲁伊 oltp oltp_内存中OLTP系列–表创建和类型
  9. .NET简谈自定义事务资源管理器
  10. 用TestComplete实现一个关键字驱动测试框架
  11. 兰州大学计算机复试英语翻译,2019兰州大学计算机专硕复试回忆
  12. vs2012转成vs2010
  13. java正则获取内容_Java利用正则表达式提取数据的方法
  14. 全国银行SWIFT代码查询
  15. Appium 环境搭建
  16. JDK1.8下载安装(Windows版)
  17. 城市和经纬度一致性验证
  18. android 糖果条纹进度条,小破站别出心裁,咒术回战进度条是高专纽扣,堀与宫村是糖果...
  19. 文件系统FastDFS和阿里云OSS
  20. SPI Flash芯片W25Q32英文版数据手册解读(二)---------存储器知识,寄存器

热门文章

  1. DzzOffice + OnlyOffice 文档协作平台
  2. STM32如何在LCD上显示单词、文字、图片等
  3. java 轻量级插件化框架_轻量级插件化框架——Small
  4. selenium使用PhantomJS浏览器报错module ‘selenium.webdriver‘ has no attribute ‘PhantomJS‘
  5. SpringBoot调取OpenAi接口实现ChatGpt功能
  6. Python可视化常用方法和常见问题解决方案
  7. 解决3ds Max在高分辨率屏幕下显示字体偏小的问题
  8. 解决Win7添加网络打印机报错0x000003e3
  9. 系列之2-神经网络中反向传播与梯度下降的基本概念
  10. postman接口测试配置到Jenkins上进行接口自动化并生成测试报告