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中使用Mako模版库的简单教程
Apr 08 Python
探究Python中isalnum()方法的使用
May 18 Python
Python决策树分类算法学习
Dec 22 Python
Python实现将数据写入netCDF4中的方法示例
Aug 30 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
Python读取xlsx文件的实现方法
Jul 04 Python
django创建简单的页面响应实例教程
Sep 06 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
Python实现语音识别和语音合成功能
Sep 20 Python
Python实现不规则图形填充的思路
Feb 02 Python
Python移位密码、仿射变换解密实例代码
Jun 27 Python
python读取mnist数据集方法案例详解
Sep 04 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
JavaScript生成一个不重复的ID的方法示例
2019/09/16 Javascript
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python中装饰器高级用法详解
2017/12/25 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
应急管理培训方案
2014/06/12 职场文书
2015年化验室工作总结
2015/04/23 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python