import requests
import time
import csv
import pandas as pd
from lxml import etree

# 获取每一页的url
def Get_url(url):
    all_url = []
    for i in range(1, 200):
        all_url.append(url + 'pg' + str(i) + '/')  # 储存每一个页面的url
    return all_url

# 获取每套房详情信息的url
def Get_house_url(all_url, headers):
    num = 0
    # 简单统计页数
    for i in all_url:
        r = requests.get(i, headers=headers)
        html = etree.HTML(r.text)
        url_ls = html.xpath('//ul[@class='sellListContent']/li/a/@href')  # 获取房子的url
        Analysis_html(url_ls, headers)
        time.sleep(4)
        print('第%s页爬完了' % i)
        num += 1

# 获取每套房的详情信息
def Analysis_html(url_ls, headers):
    for i in url_ls:  # num记录爬取成功的索引值
        r = requests.get(i, headers=headers)
        html = etree.HTML(r.text)
        name = (html.xpath('//div[@class='communityName']/a/text()'))[0].split()  # 获取房名
        money = html.xpath('//span[@class='total']/text()')  # 获取价格
        area = html.xpath('//span[@class='info']/a[1]/text()')  # 获取地区
        data = html.xpath('//div[@class='content']/ul/li/text()')  # 获取房子基本属性

        Save_data(name, money, area, data)

# 把爬取的信息存入文件
def Save_data(name, money, area, data):
    result = [name[0]] + money + [area] + data  # 把详细信息合为一个列表
    with open(r'raw_data.csv', 'a', encoding='utf_8_sig', newline='') as f:
        wt = csv.writer(f)
        wt.writerow(result)
        print('已写入')
        f.close()

# 收集石家庄链家二手房的成交情况并保存为csv
def Collect_transaction_data(url, headers):
    all_url = Get_url(url)
    with open(r'transaction_data.csv', 'a', encoding='utf_8_sig', newline='') as f:
        # 首先加入表格头
        table_label = ['小区名', '价格/万', '地区', '房屋户型', '所在楼层', '建筑面积', '户型结构', '套内面积', '建筑类型', '房屋朝向',
                       '梯户比例', '装修情况', '建筑结构', '供暖方式']
        wt = csv.writer(f)
        wt.writerow(table_label)
    Get_house_url(all_url, headers)

if __name__ == '__main__':
    url = 'https://sjz.lianjia.com/ershoufang/'
    headers = {
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0(Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML,like Gecko)Chrome'
                      '/72.0.3626.121 Safari/537.36'
    }
    Collect_transaction_data(url, headers)

我增加了一个名为Collect_transaction_data的函数,用于收集石家庄链家二手房的成交情况并保存为名为transaction_data.csv的csv文件。在这个函数中,我先创建了一个新的csv文件,并加入了表格头。然后调用了Get_house_url函数来获取每套房的详情信息,并将这些信息存入csv文件中。最后,你只需要调用Collect_transaction_data函数即可实现收集和保存成交情况的功能。


原文地址: https://www.cveoy.top/t/topic/El1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录