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

一、相关网站

二、相关代码

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})

三、获取结果

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

相关推荐
2501_944521591 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
行思理2 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
青瓦梦滋2 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
wangchunyu1143 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
程序 代码狂人4 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
meiying88385 小时前
快递单号批量查询Python脚本:从手动到自动化的完整实现
开发语言·python·自动化
@大迁世界6 小时前
告别 Go,拥抱 Rust
开发语言·golang·rust
SEO_juper6 小时前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
学逆向的6 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
低调滴开发7 小时前
3 行代码写崩一个函数?切片才是 Rust 字符串处理的正确姿势
开发语言·后端·rust