带数据分析的爬虫(1)


前言

摸个鱼现在没什么事干,浅浅的来个python的爬虫项目之一的介绍,可视化爬虫一直是我们追求的目标,但是内卷严重的现在如何进行可视化爬虫是我们面临的一大难题,在此之下这款内卷神器就诞生了。受害者网站是链家,因为确实链家的网站反爬措施比较人性化,而且数据都是有较高的规律,我们能高效地爬取数据。废话不多说,下面进行展示,如果符合您的眼缘记得打赏一个赞。

一、来吧展示

这是最后2.0版本的可视化场面
今天来介绍下初级版本:
在这里插入图片描述

自己做的tk界面找不到了,但是qt界面并不影响,主要是看代码,有兴趣可以接着往下面看。

二、如何实现爬取

1.首先观察受害者

在这里插入图片描述
可以发现无论在链家怎么点击变换,很显而易见的是变化的只有前面城市的缩写以及后面页码的变换,也就是图例中cq(重庆)以及后面pg1(页码)
所以这是我们注意的点,我们可以利用这点进行下手写出
url=‘https://’+city+‘.lianjia.com/ershoufang/pg{}/’.format(page)来便于操作

2.进行爬取

有了1步骤的帮助,接下来,我们对网站进行爬取
代码如下(示例):

city = input("请输入城市首字母:")
start_page = input("请输入爬取起始页:")
end_page = input("请输入爬取结束页:")
for page in range(int(start_page), int(end_page)+1):
    print('===========================正在下载第{}页数据================================'.format(page))
    time.sleep(1)
    #获取爬取的页面
    url = 'https://'+city+'.lianjia.com/ershoufang/pg{}/'.format(page)
    #伪装浏览器,导入的UserAgent库中有许多User-Agent,每次随机生成一个,预防被反爬虫
    headers = {
        'User-Agent': str(UserAgent().random)
    }
    response = requests.get(url=url, headers=headers)

要注意,受害者反爬不是没有,你可以在底下加上

print(response.text)
//来观察到底有没有爬取成功如果有接着下面步骤

在这里插入图片描述

可以发现房子名价格等都在li节点中,现在我们要想方设法从li节点对数据进行爬取清洗筛选,现在动手

 #解析文本文件,选择出来每一个li节点,每个节点中含有一条信息的全部内容
    lis = selector.css('.sellListContent li')
    dit = {}
    for li in lis:#向字典中存储信息
        #获取其中的文字内容的title,以下类似
        title = li.css('.title a::text').get()
        dit['标题'] = title
        positionInfo = li.css('.positionInfo a::text').getall()
        info = '-'.join(positionInfo)
        dit['开发商'] = info
        houseInfo = li.css('.houseInfo::text').get()
        dit['房子信息'] = houseInfo
        followInfo = li.css('.followInfo::text').get()
        dit['发布周期'] = followInfo
        Price = li.css('.totalPrice span::text').get()
        dit['售价/万'] = Price
        unitPrice = li.css('.unitPrice span::text').get()
        dit['单价'] = unitPrice
        csv_writer.writerow(dit)
        cities_price.append(float(dit['售价/万']))
        print(dit)

在这里插入图片描述
在这里插入图片描述
如图这是效果,当然爬取的数据是需要保存的,我们先可以保存在csv数据库中方便覆盖和重写

 f = open('二手房信息.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题', '开发商', '房子信息', '发布周期', '售价/万', '单价'])
csv_writer.writeheader()

总结

整体代码如下:



cities_price = []
#写csv表头
f = open('二手房信息.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题', '开发商', '房子信息', '发布周期', '售价/万', '单价'])
csv_writer.writeheader()

#目前这些城市有链家:北京、天津、大连、河北、青岛、济南、烟台、沈阳、上海、南京、杭州、苏州、厦门、广州、深圳、中山、佛山、惠州、东莞、珠海、成都、重庆、武汉、长沙
city = input("请输入城市首字母:")
start_page = input("请输入爬取起始页:")
end_page = input("请输入爬取结束页:")
for page in range(int(start_page), int(end_page)+1):
    print('===========================正在下载第{}页数据================================'.format(page))
    time.sleep(1)
    #获取爬取的页面
    url = 'https://'+city+'.lianjia.com/ershoufang/pg{}/'.format(page)
    #伪装浏览器,导入的UserAgent库中有许多User-Agent,每次随机生成一个,预防被反爬虫
    headers = {
        'User-Agent': str(UserAgent().random)
    }

    #获取网页的get响应
    response = requests.get(url=url, headers=headers)
    #用css选择器先将,获取到的html放到选择器中
    selector = parsel.Selector(response.text)
    #解析文本文件,选择出来每一个li节点,每个节点中含有一条信息的全部内容
    lis = selector.css('.sellListContent li')
    dit = {}
    for li in lis:#向字典中存储信息
        #获取其中的文字内容的title,以下类似
        title = li.css('.title a::text').get()
        dit['标题'] = title
        positionInfo = li.css('.positionInfo a::text').getall()
        info = '-'.join(positionInfo)
        dit['开发商'] = info
        houseInfo = li.css('.houseInfo::text').get()
        dit['房子信息'] = houseInfo
        followInfo = li.css('.followInfo::text').get()
        dit['发布周期'] = followInfo
        Price = li.css('.totalPrice span::text').get()
        dit['售价/万'] = Price
        unitPrice = li.css('.unitPrice span::text').get()
        dit['单价'] = unitPrice
        csv_writer.writerow(dit)
        cities_price.append(float(dit['售价/万']))
        print(dit)

下一次将介绍分析的功能实现以及进一步完善,可以点一个关注哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值