安居客数据的爬取并保存到MySQL

         今天阿彬爬取的网页是安居客,涉及到异步抓取,先分析首页,再得到各个首页的标签的url,做一个二次请求,最后是到得到的二次请求的详情页获取详细数据。(下面就全是代码)

1、经过首页的分析,可以得到详情页的url,圈起来的是重点。获取各个详情页的url之后,进入详情页对详细的数据进行抓取。

2、爬取数据的代码:

import requests
 
# 使用xpath方法定位元素
from lxml import etree
import csv
#
f = open('安居客2.csv', mode='a', encoding='utf8', newline='')
csv_write = csv.DictWriter(f, fieldnames=['标题', '地址', '建筑面积', '月租', '性质', '楼层', '类型', '付款方式', '使用率', '物业费',
                                          '房源亮点', '配套设施', '项目优势', '项目图片'])
csv_write.writeheader()
for d in range(1, 3):
    url = f'https://zh.sydc.anjuke.com/xzl-zu/p+{d}/'  # 请求头
    head = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
        'cookie': 'aQQ_ajkguid=49251b9d-01b8-4a2a-8750-8c8d46a3a061; sessid=ad07f13d-086f-40ff-9044-8347518facce; lps=https%3A%2F%2Fzh.sydc.anjuke.com%2Fxzl-zu%2F%7Cnull; ctid=42; fzq_h=0ef6053df4385c7f4b8d9621d0873223_1657457994428_d41105585c4a47c89785d46bc4ab49c6_2018900023; id58=CocKx2LKzUptyucVm4BwAg==; id58=CrIMp2LKzUtH/xqlmCnNAg==; wmda_uuid=371ceba20e63c73b95cd3be8c29147df; wmda_new_uuid=1; wmda_visited_projects=%3B6289197098934; wmda_session_id_6289197098934=1657457995012-368cc26f-de19-6181; ajk-appVersion=; JSESSIONID=A7A8B1E1E17991242AB9483D21223E8A; fzq_js_anjuke_business_fang_pc=ae985b0c03544ca615cc48ac7b6c5bb5_1657458865784_25; __xsptplus8=8.1.1657457995.1657458866.12%234%7C%7C%7C%7C%7C%23%23VOSWEhAO-5wxS1JfST853m4oWbleBw23%23',
        'referer': 'https://zh.sydc.anjuke.com/xzl-zu/'
    }  # 伪装,防止被封IP
 
    resp = requests.get(url, headers=head).text  # 以文本的格式打卡网页
    # print(resp)
    whh = etree.HTML(resp).xpath('//div[@class="list-item"]/a/@href')
    for src in whh:  # 对上一行代码所获取到每个标题的连接做一个遍历
        # print(src)
        data_url = requests.get(src, headers=head).text  # 二次请求,就是对新的url重新发起请求
        data_link = etree.HTML(data_url)
        title = data_link.xpath('//h1[@class="house-title"]/text()')
        jzmj = data_link.xpath('//div[@class="detail-wrap"]/div/div[1]/text()')
        pohto = data_link.xpath('//div[@id="photos"]/img/@src')
        # pictuer = 'https:' + pohto
        data = data_link.xpath('//div[@class="basic-info-wrapper"]')
        xiangxi_data = data_link.xpath('//div[@id="detaildesc"]/div')
        for a in data:
            # 因为所获取到的数据是列表,所以[0]是使得到的结果返回列表的第一个元素
            dz = a.xpath('./div[15]/span[2]/text()')[0]
            yz = a.xpath('./div[3]/span[2]/text()')[0]
            xz = a.xpath('./div[2]/span[2]/text()')[0]
            lc = a.xpath('./div[8]/span[2]/text()')[0]
            lx = a.xpath('./div[6]/span[2]/text()')[0]
            fk = a.xpath('./div[5]/span[2]/text()')[0]
            syl = a.xpath('./div[10]/span[2]/text()')[0]
            wyf = a.xpath('./div[16]/span[2]/text()')
 
            for b in xiangxi_data:
                fyld = b.xpath('./div[1]/article/text()')[0]
                ptss = b.xpath('./div[2]/article/text()')
                xmys = b.xpath('./div[3]/article/text()')
                print(title, dz, jzmj, yz, xz, lc, lx, fk, syl, wyf, fyld, ptss, xmys, pohto)
 
                data_dict = {'标题': title, '地址': dz, '建筑面积': jzmj, '月租': yz, '性质': xz, '楼层': lc, '类型': lx,
                             '付款方式': fk, '使用率': syl, '物业费': wyf, '房源亮点': fyld, '配套设施': ptss, '项目优势': xmys,
                             '项目图片': pohto}
 
                csv_write.writerow(data_dict)
 
f.close()

3、得到的数据需要做一些简单的处理,代码如下:

import pandas as pd
import numpy as np
df = pd.read_csv(r'D:\努力学python\文章\安居客1.csv')
df
 
df1 = df['配套设施'].replace('[]',0)
df2 = []
for a in df1:
    if a == 0:
        df2.append(a)
    else:
        df2.append(a[2:-2])
df['配套设施'] = df2
df2
 
 
# df2 = df['标题']
# for i in df2:
#     print(i[2:-2])
 
 
 
 
 
df3 = df['标题']
df4 = []
for b in df3:
    df4.append(b[2:-2])
    
df['标题'] = df4
df4

 4、得到的数据如下:

 5、将处理后的Excel数据表传送到本地的MySQL数据库中。

import pandas as pd
import numpy as np
df = pd.read_csv('C:/Users/jhwsx/Desktop/安居客2.csv')
 
 
from sqlalchemy import create_engine
engine = create_engine("mysql+mysqlconnector://root:root@127.0.0.1:3306/安居客",echo=False)
df.to_sql(name='安居客2',con=engine,if_exists="replace")

6、到mysql查看数据:“select 字段1,字段2,字段n from 安居客2”:

 

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 安居客出租房(武汉为例)爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗和数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租房信息(武汉地区的),并通过爬取数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客网站上的武汉的出租房信息进行爬取,且需要自己手动更新cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租房的进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客网址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目中找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取房源信息。运行后应会产生一个`武汉出租房源情况.csv`的文件。此文件为我们从安居客爬取的房源信息,其中包含`房屋租住链接、房屋描述、房屋地址、房屋详情(户型)以及经纪人、房屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**中展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其中注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行了数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一杯彬美式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值