手把手 网络爬虫:用爬虫爬取贝壳房租网西安的租房信息

前为讲解,代码放在最后。
我这次的任务是爬取西安的租房数据,并处理为csv文件形式,首先我们需要策划步骤。

  1. 创建一个csv文件用来储存收集信息。
  2. 需要原网址的html和主要信息的代码文本。
  3. 利用python爬虫抓取数据并进行一系列处理。
  4. 写入文件中。

url等信息的获取

我们需要得到的有header,url等,因此首先去贝壳网西安.
火狐浏览器下,我们只需要f12进入调试,进入网络,并任意发起一个请求,就能得到一个User-Agent如下:

得到头部信息之后我们还需要一个url,我观察了几页的url发现,他们的结构为,除去第一页外皆为
https://xa.zu.ke.com/zufang/“pagex”/#contentList
的形式。这便很好处理了。我们只需要一个循环变量为页数的for循环便可以遍历完五十页的数据。具体操作看代码。
外层便只有这些信息了,接下来我们需要精准的每一个房间的信息。任意点入一个房源,利用火狐的检查元素获得其信息的位置。
这样便得到了房价信息,同理我们需要其他房屋信息,检查元素

这些信息都已经获取后,便可以开始码代码了。

# -*- coding: utf-8 -*-
#将爬取的信息写入csv文件中
import csv
import re
from bs4 import BeautifulSoup
import requests
score_file="E:\\桌面\\西安租房.csv"
head = ['房源编号', '所在城市', '所在区县', '所在街道或地区', '小区名称', '面积', '租赁方式', '房间朝向', '月租', '计费方式', '室', '厅','卫', '入住', '租期', '看房', '所在楼层', '总楼层', '电梯', '车位', '用水', '用电', '燃气', '采暖']    # 写入文件的标题行
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'}
with open(score_file, 'w', newline='') as file_write:filewriter = csv.writer(file_write)#创建csv写入对象filewriter.writerow(head)#写入第一行for page in range(50):#以页数为迭代单元url = 'https://xa.zu.ke.com/zufang/pg' + str(page+1) + '/#contentList'response = requests.get(url=url, headers=headers)page_text = response.textsoup = BeautifulSoup(page_text, 'html.parser')#创建beautifulsoup对象div_list = soup.find_all(class_='content__list--item')#class为关键字,find_all方法需要用到class_codes = [] #编号areas = [] #地区for div in div_list:code = re.search(r'data-house_code="(.*?)" ', str(div)).group()[17:-2]#利用正则匹配codes.append(code)c_list = soup.find_all(class_='content__list--item--des')for c in c_list:a_list = c.find_all('a')#这里的a为html代码名area = []for i in range(len(a_list)):a_text = a_list[i].textarea.append(a_text)areas.append(area)for i in range(len(codes)):info = [] # extend方法,写入迭代对象info.extend([codes[i], '西安'] + areas[i])#这边按顺序将信息写入列表中url = 'https://xa.zu.ke.com/zufang/' + codes[i] + '.html'response = requests.get(url=url, headers=headers)page_text = response.textsoup = BeautifulSoup(page_text, 'html.parser')#这里有几条数据出现了问题,我用continue的方式越过,目前还没有特别处理某条数据try:ul_text = soup.find('ul', class_='content__aside__list').textdiv_text = soup.find('div', class_='content__aside--title').textexcept:continue#group()在正则表达式中用于获取分段截获的字符串#这里的5:-1的字段可以保证获取全部的信息,刚开始写的5:6后来发现,部分信息会略掉。Area= re.search(r' (.*?)㎡', ul_text).group()[1:]    #面积lease = re.search(r'租赁方式:(.*?)\n', ul_text).group()[5:-1]    #租赁方式home_aspect = re.search(r'朝向楼层:(.*?) ', ul_text).group()[5:-1]    # 朝向price = re.search(r'([0-9]*?)元/月', div_text).group()    # 月租try:chargeing = re.search(r'\((.*?)\)', div_text).group()[1:-1]    # 计费except AttributeError:#异常处理chargeing = 'None'rooms = re.search(r'([0-9*?])室', ul_text).group()    # 几室 halls = re.search(r'([0-9*?])厅', ul_text).group()    # 几厅toilets = re.search(r'([0-9*?])卫', ul_text).group()    # 几卫#同样适用extend方法info.extend([Area, lease, home_aspect, price, chargeing, rooms, halls, toilets])div = soup.find('div', class_='content__article__info')ul_list = div.find_all('ul')ul_text = ''for ul in ul_list:ul_text += ul.text#这里ul_text获取所有数据,后面通过正则匹配将数据分组,之后写入csv文件中check_in = re.search(r'入住:(.*?)\n', ul_text).group()[3:-1]    # 入住tenancy = re.search(r'租期:(.*?)\n', ul_text).group()[3:-1]    # 租期see = re.search(r'看房:(.*?)\n', ul_text).group()[3:-1]    # 看房floor = re.search(r'楼层:(.*?)/', ul_text).group()[3:-1]    # 所在楼层all_floors = re.search(r'/(.*?)\n', ul_text).group()[1:-1]    # 总楼层elevator = re.search(r'电梯:(.*?)\n', ul_text).group()[3:-1]    # 电梯stall = re.search(r'车位:(.*?)\n', ul_text).group()[3:-1]    # 车位water = re.search(r'用水:(.*?)\n', ul_text).group()[3:-1]    # 用水electricity = re.search(r'用电:(.*?)\n', ul_text).group()[3:-1]    # 用电gas = re.search(r'燃气:(.*?)\n', ul_text).group()[3:-1]    # 燃气heating = re.search(r'采暖:(.*?)\n', ul_text).group()[3:-1]    # 采暖info.extend([check_in, tenancy, see, floor,all_floors, elevator, stall, water, electricity, gas, heating])print('编号为',info[0], '写入成功')filewriter.writerow(info)

步骤理清楚之后总体只需要对函数和模块的熟练度便可写出来。
该任务用到了爬虫的基本手段,正则表达式,对csv文件处理的简单应用以及部分python的基本知识,对爬虫感兴趣的小伙伴,可以自己去试试,思路清楚之后代码难度并不高。另外需要注意的事情是,部分数据一旦缺失或一些其他问题将会导致代码报错,因此我们需要适当的添加一些try except避免错误信息的爬取!

手把手 网络爬虫:用爬虫爬取贝壳房租网西安的租房信息相关推荐

  1. Python爬虫之路-爬取北、上、广租房信息

    链家网 在实现爬取北.上.广租房信息时,需要使用fake_useragent.asyncio.aiohttp.requests.lxml以及pandas模块. 各模块关键技术如下: 1.fake_us ...

  2. 网络爬虫之scrapy爬取某招聘网手机APP发布信息

    1 引言 过段时间要开始找新工作了,爬取一些岗位信息来分析一下吧.目前主流的招聘网站包括前程无忧.智联.BOSS直聘.拉勾等等.有段时间时间没爬取手机APP了,这次写一个爬虫爬取前程无忧手机APP岗位 ...

  3. Python爬取链家网24685个租房信息并进行数据分析

    2020年注定是一个不平凡的年份,很多行业受疫情影响艰难前行,即便复产复工提速,被抑制的需求也难以短期释放.与此同时,地摊经济孕育而生,如果人们真的都去摆地摊了,是不是也会出现睡地摊的普遍现象?这时候 ...

  4. Python爬虫 scrapy框架爬取某招聘网存入mongodb解析

    这篇文章主要介绍了Python爬虫 scrapy框架爬取某招聘网存入mongodb解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 sc ...

  5. 爬虫笔记——多线程爬取斗图网表情包(threading)

    爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...

  6. python爬取贝壳找房之北京二手房源信息

    所用库 requests xpath解析库 multiprocessing多进程 pandas库用于保存csv文件 实战背景 本文首发于:python爬取贝壳找房之北京二手房源信息 主要是为了做北京二 ...

  7. 爬取链家网站中的租房信息

    爬取链家网站中的租房信息 信息爬取代码 信息爬取代码 import requests from lxml import etree import pandas as pdwith open('zufa ...

  8. python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  9. Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  10. python爬虫简单实例-爬取17K小说网小说

    什么是网络爬虫? 网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本. 爬虫流程 先由urllib的request打开Url得到网页html文档 ...

最新文章

  1. 1020 Tree Traversals
  2. spring cloud快速搭建
  3. 【ACM】杭电OJ 1877 又一版A+B(进制转换)
  4. 国企程序员有多香?这是一个普通程序员在国企的每日工作清单!
  5. MySQL搭建主从复制 读写分离 分库分表 MyCat高可用
  6. MVC5 + EF6 + Bootstrap3
  7. Hibernate一对一关联------主键关联(亲测成功)
  8. 奇虎360WEB平台部招贤纳士之服务端开发
  9. c语言分治法求众数重数_分治法求众数 - osc_twlari2q的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. mysql 行转列 显示_mysql 行转列 (结果集以坐标显示)
  11. redis学习篇(九)-----高级特性之事务处理
  12. SpringCloud面试题及答案(2021年SpringCloud面试题大全带答案)
  13. Ubuntu安装wine
  14. 网络安全学习路线是怎样的?
  15. python爬取文献资料_Python 批量爬取Web of Science 文献信息数据
  16. 让你心动的20句励志文案
  17. 古董万年历升级WiFi授时 STM32+ESP8266
  18. 下面最难防范的网络攻击是计算机病毒,求大神们帮帮忙,拜托了,在这先谢过了。...
  19. TensorRT详细入门指南
  20. es6的15道面试题

热门文章

  1. 七个习惯之七:不断更新
  2. 计算机主机包括哪两大部分,电脑硬件分为哪几个部分
  3. LINUX操作命令汇总(zt)
  4. Java操作Excel表读取的数字变成科学计数法
  5. reset按钮失效,不能清空输入框
  6. Java学习-基础篇(1)
  7. mysql gtidpurged_gtid环境下mysqldump对于set-gtid-purged的取值
  8. 微信图文插入超链接的相关问题解答
  9. 【杂谈】为了子孙后代,请不要逃离大城市或者龟缩在三四线小城市
  10. 怎么在档案写自己的计算机水平,关于个人档案怎么写范文