Python手拉手教你爬取贝壳房源数据的实战教程


Posted in Python onMay 21, 2021

一、爬虫是什么?

 在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但是这些获得数据的方式,有时很难满足我们对数据的需求,而手动从互联网中去寻找这些数据,则耗费的精力过大。此时就可以利用爬虫技术,自动地从互联网中获取我们感兴趣的数据内容,并将这些数据内容爬取回来,作为我们的数据源,从而进行更深层次的数据分析,并获得更多有价值的信息。 在使用爬虫前首先要了解爬虫所需的库(requests)或者( urllib.request ),该库是为了爬取数据任务而创建的。

 二、使用步骤

1.引入库

代码如下(示例):

import os
import urllib.request
import random
import time
class BeikeSpider:
    def __init__(self, save_path="./beike"):
        """
        贝壳爬虫构造函数
        :param save_path: 网页保存目录
        """

2.读入数据

代码如下 :

# 网址模式
        self.url_mode = "http://{}.fang.ke.com/loupan/pg{}/"
        # 需爬取的城市
        self.cities = ["cd", "sh", "bj"]
        # 每个城市爬取的页数
        self.total_pages = 20
        # 让爬虫程序随机休眠5-10秒
        self.sleep = (5, 10)
        # 网页下载保存根目录
        self.save_path = save_path
        # 设置用户代理,是爬虫程序伪装成浏览器
        self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"}
        # 代理IP的信息
        self.proxies = [
            {"https": "123.163.67.50:8118"},
            {"https": "58.56.149.198:53281"},
            {"https": "14.115.186.161:8118"}
        ]

        # 创建保存目录
        if not os.path.exists(self.save_path):
            os.makedirs(self.save_path)
   def crawl(self):
        """
        执行爬取任务
        :return: None
        """

该处使用的url网络请求的数据。

3.随机选择一个ip地址构建代理服务器

for city in self.cities:
            print("正在爬取的城市:", city)
            # 每个城市的网页用单独的目录存放
            path = os.path.join(self.save_path, city)
            if not os.path.exists(path):
                os.makedirs(path)

            for page in range(1, self.total_pages+1):
                # 构建完整的url
                url = self.url_mode.format(city, page)
                # 构建Request对象, 将url和请求头放入对象中
                request = urllib.request.Request(url, headers=self.headers)

                # 随机选择一个代理IP
                proxy = random.choice(self.proxies)
                # 构建代理服务器处理器
                proxy_handler = urllib.request.ProxyHandler(proxy)
                # 构建opener
                opener = urllib.request.build_opener(proxy_handler)
                # 使用构建的opener打开网页
                response = opener.open(request)
                html = response.read().decode("utf-8")
                # 网页保存文件名(包含路径)
                filename = os.path.join(path, str(page)+".html")

                # 保存网页
                self.save(html, filename)
                print("第%d页保存成功!" % page)

                # 随机休眠
                sleep_time = random.randint(self.sleep[0], self.sleep[1])
                time.sleep(sleep_time)

该处除随机选择ip地址以外还会限制爬取数据的速度,避免暴力爬取。

4.运行代码

def save(self, html, filename):
        """
        保存下载的网页
        :param html: 网页内容
        :param filename: 保存的文件名
        :return:
        """

        f = open(filename, 'w', encoding="utf-8")
        f.write(html)
        f.close()

    def parse(self):
        """
        解析网页数据
        :return:
        """
        pass

if __name__ == "__main__":
    spider = BeikeSpider()
    spider.crawl()

Python手拉手教你爬取贝壳房源数据的实战教程

运行结果就会这样,会保存在你的文件夹中。

总结

这里对文章进行总结:今天分析这波代码目的是为了让大家清晰明亮的了解python爬虫的运作,和大家一起学习
以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而urllib.request提供了大量能使我们快速便捷地爬取数据。

Python 相关文章推荐
在Python中使用sort()方法进行排序的简单教程
May 21 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
Oct 09 Python
Python实现针对中文排序的方法
May 09 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
pandas 透视表中文字段排序方法
Nov 16 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
详解python-图像处理(映射变换)
Mar 22 Python
python中如何设置代码自动提示
Jul 15 Python
Python如何实现远程方法调用
Aug 07 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
Python爬取科目四考试题库的方法实现
Mar 30 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
PHP中如何定义和使用常量
2013/02/28 PHP
php分页代码学习示例分享
2014/02/20 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
详解Python用户登录接口的方法
2019/04/17 Python
python内存动态分配过程详解
2019/07/15 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
Python多线程的退出控制实现
2020/08/10 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
英语商务邀请函范文
2014/01/16 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
小学生考试获奖感言
2014/01/30 职场文书
个人股份合作协议书
2014/10/24 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL
JS 基本概念详细介绍
2021/10/16 Javascript
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技