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中处理列表之reverse()方法的使用教程
May 21 Python
Python中Threading用法详解
Dec 27 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
Python中的单继承与多继承实例分析
May 10 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python函数参数操作详解
Aug 03 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python3 property装饰器实现原理与用法示例
May 15 Python
python项目对接钉钉SDK的实现
Jul 15 Python
简单了解django缓存方式及配置
Jul 19 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
jquery获得下拉框值的代码
2011/08/13 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
分享一个常用的Python模拟登陆类
2015/03/29 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
在python中做正态性检验示例
2019/12/09 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
weblogic面试题
2016/03/07 面试题
违反课堂纪律检讨书
2014/01/19 职场文书
物流管理毕业生自荐信范文
2014/03/15 职场文书
安全生产承诺书
2014/03/26 职场文书
主题班会开场白
2015/06/01 职场文书
会议主持词结束语
2015/07/03 职场文书