python 获取最新房价信息-以北京房价为例

整个数据获取的信息是通过房源平台获取的,通过下载网页元素并进行数据提取分析完成整个过程。

【阅读全文】

file

导入相关的网页下载、数据解析、数据处理库

from fake_useragent import UserAgent  # 身份信息生成库

from bs4 import BeautifulSoup  # 网页元素解析库
import numpy as np  # 科学计算库
import requests  # 网页下载库
from requests.exceptions import RequestException  # 网络请求异常库
import pandas as pd  # 数据处理库

然后,在开始之前初始化一个身份信息生成的对象,用于后面随机生成网页下载时的身份信息。

user_agent = UserAgent()

编写一个网页下载函数get_html_txt,从相应的url地址下载网页的html文本。

def get_html_txt(url, page_index):
    '''
    获取网页html文本信息
    :param url: 爬取地址
    :param page_index:当前页数
    :return:
    '''
    try:
        headers = {
            'user-agent': user_agent.random
        }
        response = requests.request("GET", url, headers=headers, timeout=10)
        html_txt = response.text
        return html_txt
    except RequestException as e:
        print('获取第{0}页网页元素失败!'.format(page_index))
        return ''

编写网页元素处理函数catch_html_data,用于解析网页元素,并将解析后的数据元素保存到csv文件中。

def catch_html_data(url, page_index):
    '''
    处理网页元素数据
    :param url: 爬虫地址
    :param page_index:
    :return:
    '''

    # 下载网页元素
    html_txt = str(get_html_txt(url, page_index))

    if html_txt.strip() != '':

        # 初始化网页元素对象
        beautifulSoup = BeautifulSoup(html_txt, 'lxml')

        # 解析房源列表
        h_list = beautifulSoup.select('.resblock-list-wrapper li')

        # 遍历当前房源的详细信息
        for n in range(len(h_list)):
            h_detail = h_list[n]

            # 提取房源名称
            h_detail_name = h_detail.select('.resblock-name a.name')
            h_detail_name = [m.get_text() for m in h_detail_name]
            h_detail_name = ' '.join(map(str, h_detail_name))

            # 提取房源类型
            h_detail_type = h_detail.select('.resblock-name span.resblock-type')
            h_detail_type = [m.get_text() for m in h_detail_type]
            h_detail_type = ' '.join(map(str, h_detail_type))

            # 提取房源销售状态
            h_detail_status = h_detail.select('.resblock-name span.sale-status')
            h_detail_status = [m.get_text() for m in h_detail_status]
            h_detail_status = ' '.join(map(str, h_detail_status))

            # 提取房源单价信息
            h_detail_price = h_detail.select('.resblock-price .main-price .number')
            h_detail_price = [m.get_text() for m in h_detail_price]
            h_detail_price = ' '.join(map(str, h_detail_price))

            # 提取房源总价信息
            h_detail_total_price = h_detail.select('.resblock-price .second')
            h_detail_total_price = [m.get_text() for m in h_detail_total_price]
            h_detail_total_price = ' '.join(map(str, h_detail_total_price))

            h_info = [h_detail_name, h_detail_type, h_detail_status, h_detail_price, h_detail_total_price]
            h_info = np.array(h_info)
            h_info = h_info.reshape(-1, 5)
            h_info = pd.DataFrame(h_info, columns=['房源名称', '房源类型', '房源状态', '房源均价', '房源总价'])
            h_info.to_csv('北京房源信息.csv', mode='a+', index=False, header=False)

        print('第{0}页房源信息数据存储成功!'.format(page_index))
    else:
        print('网页元素解析失败!')

编写多线程处理函数,初始化网络网页下载地址,并使用多线程启动调用业务处理函数catch_html_data,启动线程完成整个业务流程。

import threading  # 导入线程处理模块


def thread_catch():
    '''
    线程处理函数
    :return:
    '''
    for num in range(1, 50, 3):
        url_pre = "https://bj.fang.lianjia.com/loupan/pg{0}/".format(str(num))
        url_cur = "https://bj.fang.lianjia.com/loupan/pg{0}/".format(str(num + 1))
        url_aft = "https://bj.fang.lianjia.com/loupan/pg{0}/".format(str(num + 2))

        thread_pre = threading.Thread(target=catch_html_data, args=(url_pre, num))
        thread_cur = threading.Thread(target=catch_html_data, args=(url_cur, num + 1))
        thread_aft = threading.Thread(target=catch_html_data, args=(url_aft, num + 2))
        thread_pre.start()
        thread_cur.start()
        thread_aft.start()


thread_catch()

数据存储结果展示效果

file

【往期精彩】

file

办公自动化:Image图片转换成PDF文档存储...

python做一个微型美颜图片处理器,十行代码即可完成...

用python做一个文本翻译器,自动将中文翻译成英文,超方便的!

小王,给这2000个客户发一下节日祝福的邮件...

python 一行命令开启网络间的文件共享...

PyQt5 批量删除 Excel 重复数据,多个文件、自定义重复项一键删除...

再见XShell,这款国人开源的终端命令行工具更nice!

python 表情包下载器,轻松下载上万个表情包、斗图不用愁...

Python 自动清理电脑垃圾文件,一键启动即可...

有了jmespath,处理python中的json数据就变成了一种享受...

解锁一个新技能,如何在Python代码中使用表情包...

万能的list列表,python中的堆栈、队列实现全靠它!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 获取最新房价信息-以北京房价为例 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 自动化工具:PyAutoGUI的鼠标与键盘控制,解放双手的利器

    PyAutoGUI是一个简单易用,跨平台的可以模拟键盘鼠标进行自动操作的python库。 【阅读全文】 使用pip的方式安装pyautogui模块 pip install pyautogui pyautogui在使用的时候有两个比较关键的隐患(程序在启动起来以后很难关闭)需要注意一下。一是鼠标出现在屏幕的最上方会出现报错,二是键盘的自动操作太快,所以需要先设…

    2023年4月2日
    00
  • 周末自制了一个批量图片水印添加器!

    前段时间写了个比较简单的批量水印添加的python实现方式,将某个文件夹下面的图片全部添加上水印。 【阅读全文】 今天正好有时间就做了一个UI应用的封装,这样不需要知道python直接下载exe的应用程序使用即可。 有需要’批量图片水印添加器’的朋友可以直接跳过到文章末尾获取下载方式,下载.exe的可执行应用直接使用即可,下面主要来介绍一下实现过程。 首先,…

    2023年4月2日
    00
  • python实现excel数据与mysql数据库互通有无

    【阅读全文】 python在制作一些小工具上本身就有着得天独厚的优势,大多数非标准库的应用只需要进行简单的安装即可使用。 比如:使用python将excel中的数据导入到mysql数据库表中,或是将mysql数据库表中的数据直接导出为excel都只需要简单的几行代码就可以完成,假如使用Java来做这件事强那可就有些复杂了呢。 话不多说,接下来直接进入正题..…

    2023年4月2日
    00
  • python 如何在多层循环中使用break/continue

    关于break/continue这两个关键字在平常的使用过程中一直比较迷糊。好不容易理解了吧,过段时间不使用好像忘记了什么。这个问题也是很多初学者比较容易提及的问题。 【阅读全文】 先通过一个简单的单层循环来了解一下这两个关键字的使用。 print(‘=============单层循环使用=============’) for n in range(10):…

    2023年4月2日
    00
  • 记住这些windows网络操作命令,轻松搞定自己的电脑网络!

    windows操作系统中的网络操作主要是网络的配置、网络连接的监听、网络的路由跟踪、DNS服务器解析等等。 【阅读全文】 针对上面的这几项操作,整理了关于windows网络操作相关的使用方法。 1、网络配置 网络配置主要有ip地址、子网掩码、默认网关、DNS服务器地址,一般情况下,在公网的状态下这些地址都是自动获取的不需要我们进行特别的配置。 但是,在我们的…

    2023年4月2日
    00
  • 如何实现根据照片获取地理位置及如何防御照片泄漏地理位置

    【阅读全文】 首先,说明一下python确实可以根据照片获取地理位置,但是也是有一定的限制条件的。 获取照片地理位置的实现思路是这样的:通过提取照片中的经纬度信息。然后通过经纬度信息找到具体的地理位置信息。 安装可以读取经纬度信息的python非标准库exifread pip install exifread 将该模块导入到当前代码块中。 import ex…

    2023年4月2日
    00
  • python如何实现网络测试,了解一下speedtest-cli…

    它是一款面向开发人员的互联网连接测量工具。Speedtest CLI 为命令行带来 Speedtest 背后的可信技术和全球服务器网络。 【阅读全文】 Speedtest CLI 专为软件开发人员、系统管理员和计算机爱好者等打造,是 Ookla® 提供技术支持的首款正式 Linux 本机 Speedtest 应用程序。 Speedtest CLI是使用pyt…

    2023年4月2日
    00
  • python多线程同步售票系统解决思路

    解决问题场景:假如剩余1000张电影票需要售卖,同时有10家电影App来售卖这1000张电影票。主要的逻辑实现过程是什么,要求使用python技术栈进行解题? 【阅读全文】 1、分析过程 分析:主要信息点是10家App平台同时售卖1000张电影票。此时,可以使用10个python线程来作为10家App平台,同时售卖必须保证电影票数量的同步,比如A平台卖出了一…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部