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学习笔记之常用函数及说明
May 23 Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
详解Python中expandtabs()方法的使用
May 18 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python实现狄克斯特拉算法
Jan 17 Python
python按比例随机切分数据的实现
Jul 11 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
python基础入门之普通操作与函数(三)
Jun 13 Python
Python实现生活常识解答机器人
Jun 28 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
php返回json数据函数实例
2014/10/09 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
javascript获取web应用根目录的方法
2014/02/12 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
python的json包位置及用法总结
2020/06/21 Python
会计实习生自我鉴定
2013/12/12 职场文书
社区工作者感言
2014/03/02 职场文书
员工安全生产承诺书
2014/05/22 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
新课培训心得体会
2014/09/03 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
2015年采购员工作总结
2015/04/27 职场文书
信访维稳承诺书
2015/05/04 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL