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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python正规则表达式学习指南
Aug 02 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
基于python3实现socket文件传输和校验
Jul 28 Python
Python中的引用知识点总结
May 20 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
使用python实现学生信息管理系统
Feb 25 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
javascript 上下banner替换具体实现
2013/11/14 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
Async/Await替代Promise的6个理由
2019/06/15 Javascript
小程序实现搜索框
2020/06/19 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
理解Python垃圾回收机制
2016/02/12 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
python+logging+yaml实现日志分割
2019/07/22 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
Python tkinter实现日期选择器
2021/02/22 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
医学求职信
2014/05/28 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
2016教师节问候语
2015/11/10 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏