爬虫练习:获取某网站的房价信息

一、相关网站

二、相关代码

python 复制代码
import requests
from lxml import etree
import csv
with open('房天下数据.csv', 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['名称', '地点','价格','总价','联系电话']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for page in range(1,33):
        response = requests.get(f'https://newhouse.fang.com/house/s/b9{page}/')
        result = etree.HTML(response.text)
        names = [name.strip() for name in result.xpath('//div[@class="nlcd_name"]/a/text()')]
        addreses = result.xpath('//div[@class="address"]/a/@title')
        prices = [price.xpath('string(.)').strip() for price in result.xpath('//div[@class="nhouse_price"]')]
        total_prices = result.xpath('//p[@class="zj_price"]/text()')
        phone_texts = result.xpath('//div[@class="tel"]/p/text()')
        # 定义一个函数用于检查电话号码是否有效(这里仅作为示例,您可以根据实际需求定义有效性)
        def is_valid_phone_number(phone_number):
            # 这里可以根据实际情况编写验证规则
            # 例如,简单地检查长度大于0
            return bool(phone_number.strip())
        # 合并电话号码和分机号,并用'转'连接
        phones = ['{}转{}'.format(phone_texts[i].strip(), phone_texts[i+1].strip())
                           if is_valid_phone_number(phone_texts[i]) and is_valid_phone_number(phone_texts[i+1])
                           else "NAN"
                           for i in range(0, len(phone_texts)-1, 2)]
        # print(names,addreses,prices,total_prices,phones)
        for nam,add,pri,topr,pho in zip(names,addreses,prices,total_prices,phones):
            print(f'{nam} ====== {add} ====== {pri} ====== {topr} ===== {pho}')
            writer.writerow({'名称': nam, '地点': add,'价格':pri,'总价':topr,'联系电话':pho})

三、获取结果

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 版权声明和免责声明 本博客提供的所有爬虫代码和相关内容(以下简称"内容")仅供参考和学习之用。任何使用或依赖这些内容的风险均由使用者自行承担。我(博客所有者)不对因使用这些内容而产生的任何直接或间接损失承担责任。 严禁将本博客提供的爬虫代码用于任何违法、不道德或侵犯第三方权益的活动。使用者应当遵守所有适用的法律法规,包括但不限于数据保护法、隐私权法和知识产权法。 如果您选择使用本博客的爬虫代码,您应当确保您的使用行为符合所有相关法律法规,并且不会损害任何人的合法权益。在任何情况下,我(博客所有者)均不对您的行为负责。 如果您对本声明有任何疑问,或者需要进一步的澄清,请通过我的联系方式与我联系。 |

相关推荐
ALex_zry1 小时前
C++ ORM与数据库访问层设计:Repository模式实战
开发语言·数据库·c++
浅念-6 小时前
Linux 开发环境与工具链
linux·运维·服务器·数据结构·c++·经验分享
旺仔.2916 小时前
容器适配器:stack栈 、queue队列、priority queue优先级队列、bitset位图 详解
c++
潜创微科技--高清音视频芯片方案开发7 小时前
2026年C转DP芯片方案深度分析:从适配场景到成本性能的优选指南
c语言·开发语言
Thomas.Sir7 小时前
第三章:Python3 之 字符串
开发语言·python·字符串·string
刘景贤8 小时前
C/C++开发环境
开发语言·c++
Dxy12393102169 小时前
Python 根据列表中某字段排序:从基础到进阶
开发语言·windows·python
competes9 小时前
学生需求 交易累计积分,积分兑换奖品
java·大数据·开发语言·人工智能·java-ee