python爬取二手房价格

python爬取二手房价格

hacksb
2021-05-08 / 0 评论 / 17 阅读 / 正在检测是否收录...

最近在学习python爬虫,下面是一个简单的爬虫案例。

使用的库有:requests、parsel、csv

后期可以引入sql库将爬取出来的结果导入到数据库及可视化展示。

========================代码段===========================

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

import requests
import parsel
import csv

#1、找到数据所对应的链接地址
print("和平、南开、河西")
name = input("请输入您要查询的区域:")
if name == "和平":
   print("对不起,暂时还未编写抓取代码")
elif name == "南开":
    print("对不起,暂时还未编写抓取代码")
elif name == "河西":
    for page in range(1, 101):  # 定义一个for循环,控制页数,1-100页,名字叫page 负责翻页 在range范围呢(in range(1,1010))
        # 从1到101,因为左开右闭原则100页不包含100所以是101页
        # 然后还需要将下面所有的代码都放在for循环里面(全选,tab就行)
        print(f"\n===========正在爬取第{page}页数据==========")
        # 获取网页
        url = f"https://tj.lianjia.com/ershoufang/hexi/pg{page}/"
        # 每次翻页https://tj.lianjia.com/ershoufang/hexi/pg1/就会改变,所以就用占位符hexi/pg{page},并赋值给f,f再赋值给url
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
        # 2、发送指定链接地址的请求(代码) request
        response = requests.get(url=url, headers=headers)
        html_data = response.text
        # print(html_data)

        # 3、解析出我们需要的数据 parsel
        # 3.1 首先转换数据类型
        selector = parsel.Selector(html_data)
        # 用parsel模块的selector方法将提取出来的html_data数据进行转换,并赋值给selector
        # print(selector)

        lis = selector.css('.clear.LOGCLICKDATA')
        # 这里是使用selector.css方法提取网页统一的li标签,并赋值给lis。
        # 网页css里li标签<class="clear LOGCLICKDATA" 需要经过处理,空格改为.

        # 这里进行for循环提取网页内容
        for li in lis:  # 网页里有多个li标签,这里使用for循环遍历每一个li标签
            title = li.css('.title a::text').get()  # get方法只能取一个标签              #取房子标题
            # 每一个标签都使用css进行数据的二次提取,提取网页源码里的class="title"类标签,
            # 然后提取类标签里的a标签也就是房子名称,我们需要a标签里的值,所以需要使用text处理
            # 简单说就是我先取title类标签,然后取类标签里的a标签,最后我再取a标签里的文本内容,并用gat方法处理好赋值给title
            # 最后处理好了要用get方法赋予给title值,也就是定义的房源名称
            address = li.css('.flood a::text').getall()  # 取房子地址  因为网页里有多个标签所以用getall
            address = '- '.join(address)  # 这里将提取出来的数据用- 分割
            introduce = li.css('.houseInfo::text').get()  # 房子介绍
            star = li.css('.followInfo::text').get()  # 房子关注
            tags = li.css('.tag span::text').getall()  # 房子标签
            tags = ' | '.join(tags)
            totaLprice = li.css('.priceInfo .totalPrice span::text').get() + "万元"  # 总价
            unitprice = li.css('.unitprice span::text').get()  # 单价

            print(title, address, introduce, star, tags, totaLprice, unitprice, sep="---")
            # 这里print要放到for循环里打印,不然就只能打印出来一条数据
            # 使用 sep="---" 方法对每项结果使用---进行分割
            # 数据保存
            import csv

            with open('lianjia.csv', mode='a', encoding='utf-8', newline='') as f:
                # 用with打开一个xxx.csv的文件,mode写入方式,a为追加。设置编码写入方式.写入文件的数据需要用newline关键字参数解决数据空行。然后as f:文件对象
                csv_write = csv.writer(f)
                csv_write.writerow([title, address, introduce, star, tags, totaLprice, unitprice])
else:
    print("没有这个地址")
1

评论 (0)

取消