用Python爬取链家新房数据

你是否遇到过需要查看某个城市、某个小区、某个户型的新房信息,但是不想人工逐个浏览链家网站每一个页面的情况?那么接下来我们将介绍如何使用Python爬取链家新房数据,实现自动化数据获取。

一、获取页面HTML

首先需要获取待爬取页面的HTML源码。这可以通过Python的requests库实现。我们可以使用requests.get()方法来获取页面HTML代码,并使用BeautifulSoup库解析页面HTML代码,方便我们后续的信息提取。

import requests
from bs4 import BeautifulSoup

url = 'https://bj.fang.lianjia.com/loupan/pg1/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

上述代码中,我们设置一个url变量作为目标URL,使用requests库的get()方法发送GET请求,获取到对应网页的HTML代码,再用BeautifulSoup库将其解析为soup对象。

二、解析页面数据

在获取到页面的HTML之后,我们需要从中提取出相关的信息。与requests和BeautifulSoup配合使用的是正则表达式(re)库。在按照页面进行解析时,我们通常需要使用正则表达式来提取特定的信息。

import re

house_items = soup.select('.resblock-desc-wrapper')
house_titles = [item.select('a')[0].get_text() for item in house_items]
house_prices = [item.select('.main-price')[0].get_text() for item in house_items]
patterns = re.compile(r'(?<=href=").+?(?=">)')
house_links = [patterns.findall(str(item))[0] for item in house_items]

上述代码中的`.select()`方法用来定位soup对象中的具体标签或者标签组,`get_text()`方法用来获取标签内的文本,`re.compile()`方法用来获取特定字符串,本例中获取的是所在楼盘的链接。由于每个标签的结构都是类似的,所以我们可以使用列表推导式将所需的信息一一提取出来。

三、构建信息列表

将提取出来的信息进行组合,并将其存储到一个列表中,方便之后进行处理和存储到数据库中。

info_list = []
for i in range(len(house_items)):
    info_dict = {}
    info_dict['house_title'] = house_titles[i]
    info_dict['house_price'] = house_prices[i]
    info_dict['house_link'] = house_links[i]
    info_list.append(info_dict)

上述代码中,我们定义了一个空列表`info_list`用于储存所有的信息,随后使用一个for循环遍历每个节点,将提取到的结构化信息储存在一个名为`info_dict`的字典对象中,并将字典对象存储到`info_list`列表中。

四、多页爬取

如果我们需要爬取的房产信息比较多,那么往往需要多页进行遍历。这里我们可以使用一个封装好的函数,用于自动生成待爬行的URL。

def get_url_list(city, page):
    url = 'https://{0}.fang.lianjia.com/loupan/pg{1}/'.format(city, page)
    return url

city = 'bj'
start_page = 1
end_page = 10
url_list = []
for i in range(start_page, end_page + 1):
    url = get_url_list(city, i)
    url_list.append(url)

上述代码中,我们定义了一个`get_url_list()`函数来自动生成待爬页面URL,这里默认输入了要爬取的城市和页码。而后使用for循环遍历每页页面,并将其放进一个列表中。

五、保存数据至数据库

最后,我们将获取到的数据存储到数据库中。这里我们使用的是MySQL数据库。首先需要安装好对应的库,即pymysql库,安装完成之后可以使用下面的代码实现数据保存。

import pymysql

database = 'house'
host = 'localhost'
username = 'root'
password = 'password'
port = '3306'
conn = pymysql.connect(host=host, port=int(port), user=username, password=password, db=database, charset='utf8')
cursor = conn.cursor()
sql = '''
CREATE TABLE IF NOT EXISTS `house_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `house_title` varchar(300) NOT NULL,
  `house_price` varchar(100) NOT NULL,
  `house_link` varchar(500) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
'''
# 创建数据表
cursor.execute(sql)
# 插入数据
for data in info_list:
    values = tuple(data.values())
    cursor.execute('INSERT INTO house_info(house_title, house_price, house_link) VALUES(%s, %s, %s)', values)
    conn.commit()
cursor.close()
conn.close()

上述代码中,我们首先定义了一些MySQL数据库连接的参数,包括数据库名称、主机地址、用户名、密码、端口号等。然后将这些参数传入到`pymysql.connect()`函数中来创建一个连接对象`conn`。接着我们可以使用`cursor()`方法获得一个数据库相关的操作游标`cursor`。在执行过程中,我们使用循环将获取到的数据写入数据库中。

六、总结

通过以上步骤,我们可以实现自动化获取并存储所需链家房产信息的目标。这样不但方便了我们的查找,而且提高了工作效率。

原创文章,作者:TTYPB,如若转载,请注明出处:https://www.506064.com/n/373407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TTYPBTTYPB
上一篇 2025-04-27 15:26
下一篇 2025-04-27 15:26

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论