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 httplib,smtplib使用方法
Sep 06 Python
简单谈谈python中的Queue与多进程
Aug 25 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
python常用函数与用法示例
Jul 02 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
Python3 翻转二叉树的实现
Sep 30 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
python 制作网站小说下载器
Feb 20 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
python每次处理固定个数的字符的方法总结
2013/01/29 Python
python检测远程服务器tcp端口的方法
2015/03/14 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
PHP统计代码行数的小代码
2019/09/19 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书