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 GAE、Django导出Excel的方法
Nov 24 Python
python通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
scrapy爬虫完整实例
Jan 25 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
python中列表的含义及用法
May 26 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
Python运算符+与+=的方法实例
Feb 18 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
Python绘制分类图的方法
Apr 20 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
DHTML Slide Show script图片轮换
2008/03/03 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
python中的格式化输出用法总结
2016/07/28 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
详解python读取和输出到txt
2019/03/29 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
接口可以包含哪些成员
2012/09/30 面试题
几个Shell Script面试题
2014/04/18 面试题
英语教师岗位职责
2014/03/16 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技