首页 文章详情

数据说话|西安房价是不是降了?

印象Python | 444 2021-01-13 10:12 0 0 0
UniSMS (合一短信)



点击上方蓝字关注我们


点击上方“印象python”,选择“星标”公众号
重磅干货,第一时间送达!
中国有句俗语说得好:“金窝银窝不如自己的狗窝”,毕竟拥有属于自己的家才更有安全感和归属感,毫无置疑我们中国人大概是世界上最热衷于买房的地球生物。


现在房子那么多,我们怎么能够买到自己心满意足的房子呢?
今天带大家爬取链家的房源信息,各大房源任你挑!


[课程亮点]
1.系统分析网页性质
2.结构化的数据解析
3. csv数据保存

爬虫案例的一般步骤;
1.找到数据所对应的链接地址
2.发送指定链接地址的请求(代码)
3.解析出我们需要的数据
4.数据的保存

[环境介绍]:
python 3.9
pycharm 2020.3
requests
parsel
CSV


1.找到数据所对应的链接地址。咱们要采集的数据是二手房的房源信息。

https://xa.lianjia.com/ershoufang/


2.分析网页源码可以找到我们搜索的数据信息所以此为静态页面加载。从而可以判断出我们要找的链接地址信息就是导航栏地址。


3.使用requests模拟浏览器发送请求链接获取相应信息。
def get_url(url):
    #伪装成浏览器
    headers = {
        'User-Agent''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4356.6 Safari/537.36',
        'Referer''https://xa.lianjia.com/?utm_source=baidu&utm_medium=pinzhuan&utm_term=biaoti&utm_content=biaotimiaoshu&utm_campaign=wyxian',
    }
    try:
        #发送链接请求响应
        html = requests.get(url,headers = headers)
        if html.status_code == 200:
            print('获取源码成功!')
            print(html.text)
    except Exception as e:
        print('获取源码失败:%s' % e)
    return html.text

4.数据对比,检查是否可以搜索出页面信息


5.找到房源信息所在位置,如下图。


6.使用parsel解析数据。获取到当前页面31套房源信息。都在ul下的li标签当中。
#解析源码
def parse_html(html):
    #转换数据类型
    html = etree.HTML(html)
    lis = html.xpath('//ul[@class = "sellListContent"]/li')
    print(len(lis)) #31

7.接下来我们要分析的是房源的具体信息。我们要获取的信息有房源名称、位置、关注者信息、单价和总价还有房源详情的链接。


8.如下图可以发现我们所需的具体信息都在li标签内。所以我们决定采用xpath来获取这些信息。


9.我们将获取到的lis转码成html之后循环遍历房源信息:
   #获取房源详情
    for li in lis:
        title = li.xpath('.//div[@class="title"]/a/text()').get()  # 房源地址
        positionInfo = li.xpath('.//div[@class ="positionInfo"]/a/text()').getall()
        positionInfo = '-'.join(positionInfo)  # 房源位置
        houseInfo = li.xpath('.//div[@class = "houseInfo"]/text()').get()  # 房源信息
        followinfo = li.xpath('.//div[@class = "followInfo"]/text()').get()  # 关注信息
        tag = li.xpath('.//div[@class = "tag"]/span/text()').getall()
        tag = '|'.join(tag)  # 房源标签
        TotalPrice = li.xpath('.//div[@class = "totalPrice"]/span/text()').get()  # 房源总价
        unitPrice = li.xpath('.//div[@class = "unitPrice"]/span/text()').get()  # 房源单价
        detaillink = li.xpath('.//div[@class = "title"]/a/@href').get()  # 房源详情
        print(title, positionInfo, houseInfo, followinfo, tag, TotalPrice, unitPrice, detaillink, sep=' | ')
房源信息如下:


10.爬虫最后一步,保存信息。这里我们使用的是csv来保存房源信息。
          with open('穷游网数据.csv', mode='a', encoding='utf-8', newline=''as f:
            csv_write = csv.writer(f)
            csv_write.writerow([title, positionInfo, houseInfo, followinfo, tag, TotalPrice, unitPrice, detaillink])

11.单页信息已经保存完毕。现在我们来看网站总共有100页。我们要获取的是这100页信息。


首先我们来分析一下每一页的网页链接。
    第一页:https://xa.lianjia.com/ershoufang/
    第一页:https://xa.lianjia.com/ershoufang/pg2/
    第一页:https://xa.lianjia.com/ershoufang/pg3/


所以我们可以得出第N页的数据应该是
 第N页:https://xa.lianjia.com/ershoufang/pgN/

分析到这里了就很简单了,只需加上一个循环即可。
  for page in range(1,101):
    print('正在打印第{}页'.format(page))
    #找到数据所对应的url(网址)
    url = 'https://xa.lianjia.com/ershoufang/pg{}/'.format(page)

12.好了,到此为止。所有的步骤现在已经完成了。所有的功能都已经实现了。


需要源码的小伙伴扫码回复'链家'即可获取源码!



扫描二维码

获取更多精彩

印象python



回复下方 「关键词」,获取优质资源


回复关键词 「linux」,即可获取 185 页 Linux 工具快速教程手册和154页的Linux笔记。


回复关键词 「Python进阶」,即可获取 106 页 Python 进阶文档 PDF


回复关键词 「Python面试题」,即可获取最新 100道 面试题 PDF


回复关键词 「python数据分析」,即可获取47页python数据分析与自然语言处理的 PDF


回复关键词 「python爬虫」,满满五份PPT爬虫教程和70多个案例


回复关键词 「Python最强基础学习文档」,即可获取 168 页 Python 最强基础学习文档 PDF,让你快速入门Python

推荐我的微信号

来围观我的朋友圈,我的经验分享,技术更新,不定期送书,坑位有限,速速扫码添加!
备注:开发方向_昵称_城市,另送你10本Python电子书。

点个在看你最好看

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter