手把手 网络爬虫:用爬虫爬取贝壳房租网西安的租房信息
手把手 网络爬虫:用爬虫爬取贝壳房租网西安的租房信息
前为讲解,代码放在最后。
我这次的任务是爬取西安的租房数据,并处理为csv文件形式,首先我们需要策划步骤。
- 创建一个csv文件用来储存收集信息。
- 需要原网址的html和主要信息的代码文本。
- 利用python爬虫抓取数据并进行一系列处理。
- 写入文件中。
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避免错误信息的爬取!
手把手 网络爬虫:用爬虫爬取贝壳房租网西安的租房信息相关推荐
- Python爬虫之路-爬取北、上、广租房信息
链家网 在实现爬取北.上.广租房信息时,需要使用fake_useragent.asyncio.aiohttp.requests.lxml以及pandas模块. 各模块关键技术如下: 1.fake_us ...
- 网络爬虫之scrapy爬取某招聘网手机APP发布信息
1 引言 过段时间要开始找新工作了,爬取一些岗位信息来分析一下吧.目前主流的招聘网站包括前程无忧.智联.BOSS直聘.拉勾等等.有段时间时间没爬取手机APP了,这次写一个爬虫爬取前程无忧手机APP岗位 ...
- Python爬取链家网24685个租房信息并进行数据分析
2020年注定是一个不平凡的年份,很多行业受疫情影响艰难前行,即便复产复工提速,被抑制的需求也难以短期释放.与此同时,地摊经济孕育而生,如果人们真的都去摆地摊了,是不是也会出现睡地摊的普遍现象?这时候 ...
- Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
这篇文章主要介绍了Python爬虫 scrapy框架爬取某招聘网存入mongodb解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 sc ...
- 爬虫笔记——多线程爬取斗图网表情包(threading)
爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...
- python爬取贝壳找房之北京二手房源信息
所用库 requests xpath解析库 multiprocessing多进程 pandas库用于保存csv文件 实战背景 本文首发于:python爬取贝壳找房之北京二手房源信息 主要是为了做北京二 ...
- 爬取链家网站中的租房信息
爬取链家网站中的租房信息 信息爬取代码 信息爬取代码 import requests from lxml import etree import pandas as pdwith open('zufa ...
- python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...
- Python爬虫实战:爬取贝壳网二手房40000条数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...
- python爬虫简单实例-爬取17K小说网小说
什么是网络爬虫? 网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本. 爬虫流程 先由urllib的request打开Url得到网页html文档 ...
最新文章
- 1020 Tree Traversals
- spring cloud快速搭建
- 【ACM】杭电OJ 1877 又一版A+B(进制转换)
- 国企程序员有多香?这是一个普通程序员在国企的每日工作清单!
- MySQL搭建主从复制 读写分离 分库分表 MyCat高可用
- MVC5 + EF6 + Bootstrap3
- Hibernate一对一关联------主键关联(亲测成功)
- 奇虎360WEB平台部招贤纳士之服务端开发
- c语言分治法求众数重数_分治法求众数 - osc_twlari2q的个人空间 - OSCHINA - 中文开源技术交流社区...
- mysql 行转列 显示_mysql 行转列 (结果集以坐标显示)
- redis学习篇(九)-----高级特性之事务处理
- SpringCloud面试题及答案(2021年SpringCloud面试题大全带答案)
- Ubuntu安装wine
- 网络安全学习路线是怎样的?
- python爬取文献资料_Python 批量爬取Web of Science 文献信息数据
- 让你心动的20句励志文案
- 古董万年历升级WiFi授时 STM32+ESP8266
- 下面最难防范的网络攻击是计算机病毒,求大神们帮帮忙,拜托了,在这先谢过了。...
- TensorRT详细入门指南
- es6的15道面试题