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中的变量、引用、拷贝和作用域的问题
Apr 07 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
python flask实现分页的示例代码
Aug 02 Python
python实现顺序表的简单代码
Sep 28 Python
Python数据可视化之画图
Jan 15 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
利用python制作拼图小游戏的全过程
Dec 04 Python
pytorch DataLoader的num_workers参数与设置大小详解
May 28 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
PHP经典面试题集锦
2015/03/19 PHP
php搜索文件程序分享
2015/10/30 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
php cookie 详解使用实例
2016/11/03 PHP
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
python 图像增强算法实现详解
2021/01/24 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
中专毕业生求职简历的自我评价
2013/10/21 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
小学教师党员承诺书
2015/04/27 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
node快速搭建后台的实现步骤
2022/02/18 NodeJs