当前位置:   article > 正文

python爬取链家网页数据_链家网交易信息爬取

链家网交易信息爬取
"""
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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/422631
推荐阅读
相关标签
  

闽ICP备14008679号