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中readline判断文件读取结束的方法
Nov 08 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
python实现京东秒杀功能
Jul 30 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
pytorch的batch normalize使用详解
Jan 15 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
Python Django路径配置实现过程解析
Nov 05 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
jquery动态添加option示例
2013/12/30 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
2014年调度员工作总结
2014/11/19 职场文书
2014年保卫工作总结
2014/12/05 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
实现GO语言对数组切片去重
2022/04/20 Golang