Python爬虫实战爬取租房网站-链家上海区域信息(过程超详细)

内容可能有点啰嗦 大佬们请见谅 后面会贴代码 带火们有需求的话就用吧
正好这几天做的实验报告就直接拿过来了,我想后面应该会有人用的到吧.
自己学着分析网址的话链家这个租房网站其他地区的也可以爬大家不妨试试
任务目的:从链家上爬取上海地区的租房信息

1.url分析

https://sh.lianjia.com/zufang/这是网站的首页

网站的第二页https://sh.lianjia.com/zufang/pg2/#contentList
此时通过对比,可以发现将/pg2/中的2换成1那时网站内容就是第一页的内容,后面的#contentList对网页内容没有影响这里我们就直接删除了。
我这里拿静安区为例
首页网址:https://sh.lianjia.com/zufang/jingan/。第二页: https://sh.lianjia.com/zufang/jingan/pg2/

2.页面元素分析

(1) 使用chrome浏览器的检查功能,点击 左侧的小箭头来分析页面。
我们将鼠标放到第一个房源信息那,可以看到里面的内容都是在content__list—item这个类里面
第二个房源的话也是在这个类里面,后面的内容有些不同而已

我们往上翻发现这些房源信息都在content__list这个类中

所以我们要的信息从这里面获取就行不需要再从整个页面中查找,先找大标签(这里就是这个content__list),再找其中的小便签。
我们这里把要获取的数据都放入infos里面

infos = soup.find('div',{'class':'content__list'}).find_all('div',{'class':'content__list--item'})`

(2) 分析小标签里要提取的元素;
拿名称来举例,它是在之前找的小便签里的content__list–item–title twoline类的a标签中

name = info.find('p',{'class': 'content__list--item--title twoline'}).find('a').get_text().strip()

我们只需获取里面的文本信息就行了所以这里我们用到了get_text()函数,strip()用来消除左右空格
当然,我们发现content__list–item–title twoline类是在content__list–item—main里面的,这里我们可以在检查里面用ctrl+f来搜索看看content__list–item—main类里是否有第二个content__list–item–title twoline类,如果重复就要另外分析。这边并没有第二个content__list–item–title twoline类,就不需要考虑了。
(1of30一个页面30个信息还有29个content__list–item–title twoline是下面房子里面的)

价格这边同样的方法不做赘述

获取具体地址,面积,门朝向以及户型的时候我们发现它是在同一个类里面,它们用’ / '做了分隔。这边我们可以用split()函数来切割,这样就能解决这个问题。

我们将文本放入变量mix中

mix = info.find('p', {'class': 'content__list--item--des'}).get_text()
mix = re.split(r'/', mix)

后面地址,面积,门朝向和房型就很好处理了

area = mix[1].strip()
address = mix[0].strip()
door_orientation = mix[2].strip()
style = mix[3].strip()

地区的话方法类似就不赘述了直接贴代码

region = re.split(r'-', address)[0]

核心代码如下所示:

infos = soup.find('div',{'class':'content__list'}).find_all('div',{'class':'content__list--item'})
# print(infos)for info in infos:name = info.find('p',{'class': 'content__list--item--title twoline'}).find('a').get_text().strip()price = info.find('span',{'class': 'content__list--item-price'}).get_text()mix = info.find('p', {'class': 'content__list--item--des'}).get_text()mix = re.split(r'/', mix)area = mix[1].strip()address = mix[0].strip()door_orientation = mix[2].strip()style = mix[3].strip()# advantage = info.find('p',{'class':'content__list--item--bottom oneline'}).get_text()region = re.split(r'-', address)[0]

3. 逐页爬取
我们要爬取网页关键字搜索返回的所有页面的数据,因此我们需要做逐页爬取,通过定位网页元素中下一页的点击按钮中的url。
拿静安区为例,总共有78页

urls = ['https://sh.lianjia.com/zufang/jingan/pg{}/'.format(str(i)) for i in range(1, 79)]

再加上个for循环就可以访问所有页面了
最后是代码详情(静安区为例):

import requests, time, re, csv
from bs4 import BeautifulSoup
import codecswith open(r'C:\Users\小阿辰\Desktop\链家上海\静安.csv', 'ab+')as fp:fp.write(codecs.BOM_UTF8)
f = open(r'C:\Users\小阿辰\Desktop\链家上海\静安.csv','a+',newline='', encoding='utf-8')
writer = csv.writer(f)
writer.writerow(('名称', '租金', '面积', '具体地址', '门朝向', '户型', '地区'))
r'C:\Users\小阿辰\Desktop\链家上海\静安.csv'
urls = ['https://sh.lianjia.com/zufang/jingan/pg{}/'.format(str(i)) for i in range(1, 79)]headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'
}
for url in urls:res = requests.get(url, headers=headers)
# print(res.text)  网页内容  文本
# print(res.content.decode('utf-8'))  #网页内容 二进制html = res.textsoup = BeautifulSoup(html, 'lxml')
# print(soup)infos = soup.find('div',{'class':'content__list'}).find_all('div',{'class':'content__list--item'})
# print(infos)for info in infos:name = info.find('p',{'class': 'content__list--item--title twoline'}).find('a').get_text().strip()price = info.find('span',{'class': 'content__list--item-price'}).get_text()mix = info.find('p', {'class': 'content__list--item--des'}).get_text()mix = re.split(r'/', mix)area = mix[1].strip()address = mix[0].strip()door_orientation = mix[2].strip()style = mix[3].strip()# advantage = info.find('p',{'class':'content__list--item--bottom oneline'}).get_text()region = re.split(r'-', address)[0]writer.writerow((name, price, area, address, door_orientation, style, region))time.sleep(1)f.close()

爬取到的数据:

换一下url就可以爬其他区的数据了,我是3.31左右弄的 当时爬各个区得到了大概2.3w条左右的数据 如果有大佬帮我改改的话就再好不过了 我是个萌新 函数都没封装 大家就将就着看看吧。
希望能得到大佬的指教,诶
qq:2798704484

Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)相关推荐

  1. python爬虫实战-爬取视频网站下载视频至本地(selenium)

    #python爬虫实战-爬取视频网站下载视频至本地(selenium) import requests from lxml import etree import json from selenium ...

  2. Python爬虫实战- 爬取整个网站112G-8000本pdf epub格式电子书下载

    (整个代码附在最后) 目录: 爬虫准备 - 某电子书网站内容架构分析 爬虫前奏 - 网站Html代码分析,如何获取需要的链接? 爬虫高潮 - 测试是否有反爬虫措施,测试是否能正常下载一个sample ...

  3. python爬虫实战---爬取大众点评评论

    python爬虫实战-爬取大众点评评论(加密字体) 1.首先打开一个店铺找到评论 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...

  4. python爬虫实战-爬取微信公众号所有历史文章 - (00) 概述

    http://efonfighting.imwork.net 欢迎关注微信公众号"一番码客"获取免费下载服务与源码,并及时接收最新文章推送. 最近几年随着人工智能和大数据的兴起,p ...

  5. 初次尝试python爬虫,爬取小说网站的小说。

    本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说. 下面直接上菜. 1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requests.requests是python实现的简单易 ...

  6. python爬虫实战--爬取猫眼专业版-实时票房

    小白级别的爬虫入门 最近闲来无事,发现了猫眼专业版-实时票房,可以看到在猫眼上映电影的票房数据,便验证自己之前学的python爬虫,爬取数据,做成.svg文件. 爬虫开始之前 我们先来看看猫眼专业版- ...

  7. python爬虫 亲手爬取图书网站

    这个爬虫只是一个简单的爬虫,单线程并且任务的管理等 一 爬虫数据持久化方式 使用的是mysql数据库.需要设备上先安装mysql数据库,python中使用mysql 数据库的方法是使用pymysql库 ...

  8. Python爬虫实战 爬取同城艺龙酒店信息

    1.爬虫说明        同城艺龙的反爬做的是非常好的,本博主在与同城艺龙进行了一整天的殊死搏斗才将其完全的爬下来,本博主是以无锡为例,将无锡的所有酒店的相关信息都爬了下来,共3399条酒店数据,当 ...

  9. Python爬虫04-xpath爬取豆瓣韩剧数据

    xpath爬取豆瓣韩剧数据 需求:爬取豆瓣韩剧的标题.评分.评论以及详情页地址. 1.导入模块 import requests from lxml import etree import csv 2. ...

最新文章

  1. [zz] 深入java虚拟机之本地方法
  2. Halcon中visualize_object_model_3d算子详解
  3. 阿里云服务器配置开发环境第五章:Centos7.3切换为iptables防火墙
  4. js中的弹窗alert、confirm和prompt
  5. 突破5G壁垒,睿至科技集团以技术实力赋能产业发展
  6. 博客网最终能否破茧成蝶?
  7. Spring Boot 2.0 多数据源编程 jdbcUrl is required with driverClassName
  8. linux添加自己的键盘映射,Linux 键盘映射
  9. Win-MASM64汇编语言-MUL/DIV
  10. 达“超人”水平?强化学习得这么用!
  11. php加密密码解析,php密码加密解密
  12. 2.卷2(进程间通信)---Posix IPC
  13. 【项目总结】订单性质识别
  14. vgh电压高了有什么_能源网建设的风电高电压穿越测试有何作用
  15. 原版windows下载地址
  16. 美团王兴,为什么让骑手注册个体户?详解他的套路,望周知
  17. IF:5+ 7种癌症免疫治疗证明DNA损伤反应通路突变可作为免疫检查点阻断疗效的潜在生物标志物
  18. Go : constant shifts恒定位移旋转(附完整源码)
  19. 生物信息学算法之Python实现|Rosalind刷题笔记:001 碱基统计
  20. isEmpty和null区别

热门文章

  1. 浏览器劫持定义及危害、处理浏览器被劫持自动跳转到某个网页的修复教程
  2. (1)安装Arch系统 - 树莓派Raspberry Pi - Arch Linux(转载)
  3. jni调用出现SIGABRT崩溃
  4. mysql LAST_DAY() 函数
  5. 人工智能技术助力民族语言保护大有可为
  6. 计算机存储单位试题,计算机存储试题及答案
  7. STM32定时器输入捕获,脉宽测量知识点
  8. 如何避免黑客攻击?国内首个云端加密代码库来帮忙
  9. 淡季来临,淘宝新开店铺该如何是好
  10. storyboard(故事版)新手教程 图文详解 4.把约束拉成属性 在代码文件里进行修改