利用bs4爬取贝壳二手房信息,并将信息存储进csv文件

利用bs4爬取贝壳二手房信息,并将信息存储进csv文件

我们首先查看爬取目标,下面是爬取目标的网页展示。
请添加图片描述
其次对所要爬取的数据进行结构观察,
可以看到所有的数据全部存储在class=‘sellListContent’下面的ul里,其对应的xpath路径为:/html/body/div[1]/div[4]/div[1]/div[4]/ul。在了解了该网页的信息结构以后,我们就可以进行爬虫程序的构建。
在这里插入图片描述
首先是对第一页进行爬虫设计,代码如下:

import time
import  requests
from bs4 import BeautifulSoup as bs
import  pandas
def text(page):
	#此处调用函数,通过输入页数利用函数进行数据获取
    url='https://sjz.ke.com/ershoufang/yuhua1/pg{}/'.format(page)
    #请求头
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'
    }
    #利用bs4对网页进行解析
    soup=requests.get(url=url,headers=headers)
    save = soup.content.decode('utf-8')
    shuju = bs(save, 'html.parser')
    #利用select组合查询对房子标题所对应的位置进行查找
    a=shuju.select('ul.sellListContent>li.clear>div>div>a') #房子标题
    #利用select组合查询对房子小区名所对应的位置进行查找
    b=shuju.select('ul.sellListContent>li.clear>div>div>div>div>a') #房子小区名
    #利用select组合查询对房子特点所对应的位置进行查找
    c=shuju.select('ul.sellListContent>li.clear>div>div.address>div.houseInfo')#房子特点
    d=shuju.select('ul.sellListContent>li.clear>div>div.address>div.followInfo')#房子关注数以及几天前发布
  	#利用select组合查询对房价所对应的位置进行查找 
  	e=shuju.select('ul.sellListContent>li.clear>div>div.address>div.priceInfo>div.totalPrice.totalPrice2>span')#房价
    #利用select组合查询对房价单价对应的位置进行查找 
    f=shuju.select('ul.sellListContent>li.clear>div>div.address>div.priceInfo>div.unitPrice>span')#房价单价
    #对每个房子对应的详情页链接位置进行获取
    g=shuju.select('ul.sellListContent>li.clear>a.img.CLICKDATA.maidian-detail')#房子详情页url
    #遍历并存储进title数列
    for i in a:
        title.append(i['title'])#提取title属性的值
    #对小区名字进行存储
    for i in b:
        xiaoqu.append(i.get_text())#获取标签里的文本信息
    #对特点进行存储
    for i in c:
        z=i.get_text().split()#对标签里的文本信息进行获取,并进行切割
        str=''
        #遍历切割获得的数列,对字符串进拼接
        for j in z:
            str += j
        tedian.append(str)
    #对发布时间以及关注人数进行存储
    for i in d:
        z=i.get_text().split()#同上进行切割存储
        str = ''
        for j in z:
            str += j
        xinxi.append(str)#发布信息时间以及关注人数
    #对房子价格进行存储,存储形式为'200万'
    for i in e:
        price.append(i.get_text()+'万')
    #对房子单价进行存储
    for i in f:
        uprice.append(i.get_text())
    #对房子详情页的url链接进行存储
    for i in g:
        href.append(i['href'])
    #将所获得的数据进行数据整合,首先将每个数据整合成一个字典对象,然后将字典对象存储进info数列
    for a,b,c,d,e,f in zip(title,xiaoqu,tedian,xinxi,price,uprice):
        z={
            'title':a,
            'xiaoqu':b,
            'tedian':c,
            'xinxi':d,
            'price':e,
            'uprice':f,
            'href':g
        }
        info.append(z)

在对数据爬取完毕以后,我们则要将数据存储进csv文件,以便我们以后对信息进行查询,避免反复爬取。
主函数以及存储函数如下:

#存储csv所用函数
def save():
    z = {'标题': title, '小区': xiaoqu, '特点': tedian, '信息': xinxi, '价格': price, '单价': uprice,'链接':href}
    dm_file = pandas.DataFrame(z)
    # dm_file.to_excel('Dongman.xlsx', sheet_name="动漫数据分析")
    dm_file.to_csv("房价1.1.csv", encoding='utf-8-sig', index=True, index_label='序号')
#主函数
if __name__ == '__main__':#!!!!!!!!请先从此处开始程序!!!!!!!!
    info=[]#每一页的房子信息总数列
    title = []#标题数列
    xiaoqu = []#小区名字数列
    tedian = []#特点数列
    xinxi = []#信息数列
    price = []#房子价格数列
    uprice = []#房子单价数列
    xuhao=[]#存储序号数列
    href=[]#房子详情页连接数列
    z=input('请输入开始爬取页数:')
    k=input('请输入结束爬取页数:')
    for i in range(int(z),int(k)+1):
        print('开始爬取{}页数据,请勿关机或停止该程序'.format(i))
        try:
            text(i)#此处调用text函数对数据进行爬取
            print('第{}页已爬取完毕'.format(i))
            time.sleep(5)#硬核休眠,避免因爬取频率过高而导致的banIP
        except  Exception as e:
            print('错误为:'+e)
        time.sleep(2)#在对单独一样存储完毕以后再次进行休息,以免被封
    save()#触发save函数,将所爬取的数据存储进csv文件
    print('信息已保存完毕,文件存储位置为当前程序所在文件夹,祝君开心')

爬取过程效果图:
在这里插入图片描述
爬取信息所得的csv文件效果:
在这里插入图片描述

希望能够对您有所帮助
本着分享代码的原则为大家免费下载,无需积分,点击此处进行下载资源跳转

2022-04-18更新:
项目上传到了GitHub,项目地址为:https://github.com/ZhuMengMeng666/KugouSpider

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪萌萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值