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

一、相关网站

二、相关代码

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

三、获取结果

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

相关推荐
一二小选手5 分钟前
【Java Web】分页查询
java·开发语言
大G哥5 分钟前
python 数据类型----可变数据类型
linux·服务器·开发语言·前端·python
vortex518 分钟前
解决 VSCode 中 C/C++ 编码乱码问题的两种方法
c语言·c++·vscode
Code成立20 分钟前
《Java核心技术 卷I》用户图形界面鼠标事件
java·开发语言·计算机外设
Xiao Fei Xiangζั͡ޓއއ39 分钟前
一觉睡醒,全世界计算机水平下降100倍,而我却精通C语言——scanf函数
c语言·开发语言·笔记·程序人生·面试·蓝桥杯·学习方法
记录无知岁月42 分钟前
【MATLAB】目标检测初探
开发语言·yolo·目标检测·matlab·yolov3·yolov2
远望清一色1 小时前
基于MATLAB身份证号码识别
开发语言·图像处理·算法·matlab
NMBG221 小时前
[JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决
java·开发语言·面试·java-ee·intellij-idea
Py小趴1 小时前
Python自学之Colormaps指南
开发语言·python·数据可视化
晒足以百八十1 小时前
基于Python 和 pyecharts 制作招聘数据可视化分析大屏
开发语言·python·信息可视化