python爬取豆瓣租房信息

2023-05-16

文章目录

  • 任务描述
  • 完整代码
  • 运行结果

任务描述

使用python爬虫,实现获取豆瓣“北京租房”的租房信息,并筛选适合个人的房源存入Excel。使用方法都写在注释里了,请认真阅读哦~

完整代码

import time  # 设置爬虫等待时间

import requests  # 获取网页数据
import xlwt
from bs4 import BeautifulSoup  # 解析网页数据

"""
获取豆瓣租房信息
获取excel后可能会产生空白行,为了表示每一页的信息独立开
也可以根据该操作去除 https://jingyan.baidu.com/article/cbcede075ad25202f50b4d52.html
"""


# 获取豆瓣网址并解析数据
def get_douban_books(url, num):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    }
    res = requests.get(url, headers=headers)  # requests发起请求,静态网页用get
    soup = BeautifulSoup(res.text, 'html.parser')

    m = n = num

    item_a_title = soup.find_all("td", class_="title")
    for item in item_a_title:
        tag_a = item.find("a")
        name = tag_a["title"]
        link = tag_a["href"]

        # TODO 第一种方式:排除不想租的位置或者某些条件(例如位置,钱数,例如:八通线,2700)
        # not_contains = ["八通线", "天通苑", "宋家庄", "龙泽", "后沙峪", "亦庄", "密云", "房山", "通州",
        #                 "石景山",
        #                 "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3300", "3400"]
        #
        # flag = False
        # for nc in not_contains:
        #     if nc in name:
        #         flag = True
        # if not flag:
        #     # print("[{}]({})".format(name, link))
        #     sheet.write(m, 0, name)
        #     sheet.write(n, 1, link)
        #     m += 1
        #     n += 1

        # TODO 第二种方式:添加想租的位置或者某些条件(例如位置,钱数,例如:八通线,2700)
        contains = ["牡丹园" "健德门", "西土城", "北土城", "安贞门", "惠新西街南口", "芍药居", "十号线",
                    "10号线", "1分钟", "2分钟", "3分钟", "4分钟", "5分钟"]
        for c in contains:
            if c in name:
                sheet.write(m, 0, name)
                sheet.col(0).width = 256 * len(name)
                sheet.write(n, 1, link)
                sheet.col(1).width = 256 * len(link)
                m += 1
                n += 1


# 定义保存Excel的位置
workbook = xlwt.Workbook()  # 定义workbook
sheet = workbook.add_sheet('豆瓣租房')  # 添加sheet
head = ['租房信息', '地址']  # 表头
for h in range(len(head)):
    sheet.write(0, h, head[h])  # 把表头写到Excel里面去
    sheet.col(0).width = 512 * 50
    sheet.col(1).width = 256 * 50

# 填写需要获取的页数
# all_page = 1
all_page = int(input("请填写需要获取的页数:"))
# 每页个数
page_size = 30
url = 'https://www.douban.com/group/beijingzufang/discussion?start={}'
urls = [url.format(num * page_size) for num in range(all_page)]
page_num = [num * page_size + 1 for num in range(all_page)]
for i in range(all_page):
    get_douban_books(urls[i], page_num[i])
    print("==========第" + str(i + 1) + "页,完成==========")
    # 暂停 1 秒防止访问太快被封
    time.sleep(1)

# 保存 Excel 文件
workbook.save('./douban_zufang.xls')
print("写入完成!")

运行结果

租房信息

毕竟是爬取信息,可能会遇到网站更新抵制反爬,如果遇到什么问题或者有其他问题,在下面留言,我看到了会及时回复的哦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取豆瓣租房信息 的相关文章

  • 求二维数组最大值

    JaVa求二维数组最大值 public static void main String args TODO Auto generated method stub int a 61 1 2 3 4 5 6 7 8 9 int re 61 ma
  • 打印杨辉三角形JAVA数组方法

    打印杨辉三角形 public static void main String args TODO Auto generated method stub putYhTriangle 10 打印杨辉三角形 public static void
  • 九宫格随机数Java数组

    无法判断是否重复了 public class Deno7 public static void main String args 声明一个3行3列的数组 int array 61 new int 3 3 int b for int i 61
  • 开发一个表示坐标点的类Point,该类对外提供以下公有实例方法:

    开发一个表示坐标点的类Point xff0c 该类对外提供以下公有实例方法 xff1a a 设置横纵坐标 b 偏移横坐标 c 偏移纵坐标 d 偏移横纵坐标 e 求本点到另外一个点的距离 勾股定理 f 求本点到另外一个点与x轴夹角的余弦值 g
  • 开发一个人类,具有实例属性身高,体重,星座,有如下实例方法:

    import java util Random 开发一个人类 xff0c 具有实例属性身高 xff0c 体重 xff0c 星座 xff0c 有如下实例方法 xff1a a 初始化方法 xff1a 内部随机产生身高 xff08 140 200
  • 【百度智能云】基于http3的xcdn 开放直播方案设计与实践

    大神 柯老师 现有的融合CDN 0 需要集成sdk sdk 是集成在端侧 缺点 sdk 对端侧有影响 多云模式下 sdk不互通 XCDN 设计目标 保持现有cdn的优势 承载各种业务 直播点播 让各家的cdn互通 cdn 厂家屏蔽了差异性
  • 开发一个表示图书的Book类

    Book类型 public class Book 1 开发一个表示图书的Book类 该类具有私有的实例属性 xff1a 编号 名称 作者 价格 出版社 出版日期等信息 并且该类为上述属性提供公有的get和set方法 xff0c 同时该类还具
  • ATM管理者操作界面

    ATM界面 import java util Scanner public class AccountView private AccountManger am 61 new AccountManger public void regist
  • Java类的操作

    银行账户类 package com github Mrtiang public class Account 创建账户属性 private int id private double balance private double annual
  • javase类的简单应用圆与圆柱类

    圆类 package com github MrtianSuper public class Circle private double radius 61 1 设置圆的半径 无参数构造方法 public Circle this radiu
  • Java银行账户可透支类

    账户类 java package com github Mrtiang public class Account 创建账户属性 private int id private double balance private double ann
  • java继承的概念与相关应用

    继承 1 继承概述 需求说明 xff1a 设计两个类 xff1a Dog和Penguin 问题 xff1a 其中属性和方法有大量的重复 xff0c 可以优化 xff0c 使用继承 继承使用的关键字 xff1a extends xff1a 扩
  • Java类与继承

    继承二 1 static关键字 使用场景 xff1a 当某些场景下不需要创建多个 内容 xff0c 每个类的实例对象共享一个 内容 时就可以使用static关键字来修饰 含义 xff1a static表示静态内容 xff0c 使用stati
  • 继承,static关键字,abstract,单例模式

    1 为什么要有类的继承性 类的继承性可以减少代码冗余度 xff0c 提高代码复用性 xff0c 提高代码操作效率 2 继承的格式 xff08 语法 xff09 子类 extends 父类 3 子类继承父类后有哪些不同 子类范围大于父类 xf
  • KVM详解(一)——KVM基础知识

    今天继续给大家介绍Linux运维相关知识 xff0c 本文主要内容是KVM的基础知识 一 虚拟化简介 xff08 一 xff09 虚拟化概述 在计算机中 xff0c 虚拟化技术是一种资源管理技术 xff0c 可以将计算机的各硬件资源 xff
  • Linux桌面图形化安装详解

    今天继续给大家介绍Linux相关知识 xff0c 本文主要内容是Linux xff08 CentOS7 xff09 图形化GUI页面安装详解 一 Linux GUI图形化页面简介 尽管在运维工作中 xff0c 我们很少在Linux上安装图形
  • 【MediaSoup c#】 worker的创建

    js rust 不太熟 c 似乎还好懂一些 学习media soup 的各个组件及大体使用方式 学习其设计理念 MediasoupServer 管理worker列表 worker的表达是通过 IWorker 抽象类 拥有一个observer
  • KVM详解(三)——KVM创建虚拟机

    今天继续给大家介绍Linux运维相关知识 xff0c 本文主要内容是在KVM上创建虚拟机 一 安装准备 在前文KVM详解 xff08 二 xff09 KVM安装部署中 xff0c 我们安装了KVM 今天 xff0c 我们就来创建一个KVM的
  • KVM详解(九)——CentOS6虚拟机关机失败问题解决

    今天继续给大家介绍Linux运维相关知识 xff0c 本文主要内容是CentOS6虚拟机关机失败问题解决 一 问题描述 当我们使用KVM安装CentOS6系统后 xff0c 会发现一个问题 xff0c 即无法通过virsh shutdown
  • Python循环结构详解

    今天继续给大家介绍Python相关知识 xff0c 本文主要内容是Python循环结构 循环是一种编程语言的重要结构 xff0c 在Python中 xff0c 存在着两种循环 xff0c 一种是遍历循环 xff0c 一种是while循环 一

随机推荐