赞
踩
""" 1. 首先去分析网页数据结构 >>> 想要数据内容是在哪里 如果你想要采集多个房源详情页数据内容, 需要发送2次请求 第一次请求为了获取房源详情页的url地址 第二次请求为了获取房源基本信息数据 代码实现步骤: 第一次请求 获取数据 解析数据 1. 发送请求, 对于列表页面发送请求 2. 获取数据, 获取网页源代码 3. 解析数据, 提取我们想要数据内容 房源详情页的url地址 第二请求 获取数据 解析数据 4. 发送请求, 对于房源详情页的url地址发送请求 5. 获取数据, 获取网页源代码 6. 解析数据, 提取我们想要房源信息 7. 保存数据, 把房源信息保存表格里面 """ # 导入数据请求模块 import requests # 导入数据解析模块 import parsel # 导入格式化输出模块 import pprint # 导入csv模块 import csv #打开一个csv文件,将数据保存在里面 # f = open('data.csv', mode='a', encoding='utf-8', newline='') #表头 csv_writer = csv.DictWriter(f, fieldnames=[ '区域', '租赁方式', '价格', '面积', '朝向', '楼层', '电梯', '车位', '燃气', '用水', '用电', '采暖', '详情页', ]) csv_writer.writeheader()# 写入表头 # 1. 发送请求, 对于列表页面发送请求 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35' }#每个网页都一样,不用变 #遍历所有页进行数据爬取,page这里是点进去其它页看哪里是页数变化的地方,就改为{page} for page in range(1,6): url = f'https://cc.lianjia.com/zufang/chaoyangqu/pg{page}l3/#contentList' # 列表页面url地址,这个是选不同区的适合的网页地址,要变(导航栏中的网页地址) response = requests.get(url=url, headers=headers) selector = parsel.Selector(response.content.decode('utf-8')) #获取每个详情页的连接地址,在此处是由列表页的表头可以点进详情页,故是表头的css,获取的是a标签里的href模块,不用变 hr = selector.css('#content > div.content__article > div.content__list > div > div > p.content__list--item--title > a::attr(href)').getall() #上面hr获取到的网页地址不完整,需要自行补上完整的 href = ['https://cc.lianjia.com'+str(i) for i in hr] #房子所属区,因为是在列表页获取不是在详情页获取的,故region必须写这里,后面如果是getall,出来的是区还有后面的,只是get()只出来一个区,不用变 region = selector.css('#content > div.content__article > div.content__list > div > div > p.content__list--item--des > a::text').get() #print(href) #进详情页获取数据 for index in href: html_data = requests.get(url=index, headers=headers).text selector_1 = parsel.Selector(html_data) #下面这三个的css都不用变 leaseway = selector_1.css('.content__aside__list li::text').get()# 租赁方式 price = selector_1.css('.content__aside--title span::text').get() # 价格 label_list = selector_1.css('.content__article__info li::text').getall() # 基本信息 area = label_list[1] # 面积 face = label_list[2] # 朝向 floor = label_list[7] # 楼层 lift = label_list[8] # 电梯 park = label_list[10] # 车位 gas = label_list[14] # 燃气 water = label_list[11] # 用水 elec = label_list[13] # 用电 heat = label_list[16] # 采暖 #改列表数据为字典,以储存在csv文件里 dit = { '区域': region, '租赁方式': leaseway, '价格': price, '面积': area, '朝向': face, '楼层': floor, '电梯': lift, '车位': park, '燃气': gas, '用水': water, '用电': area, '采暖': heat, '详情页': index, } csv_writer.writerow(dit) # print(dit) # print(region, leaseway,price,area,face, floor,lift,park,gas,water,area,heat,index) # break
#如果代码有出错,可能是因为有的房子是广告进去之后界面会变,所有css取不到,可以考虑不选到有广告的那个房子
#python代码整体缩进是选中要缩进的,点Tab
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。