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实现把json格式转换成文本或sql文件
Jul 10 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
基于python3实现socket文件传输和校验
Jul 28 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
Python如何读取、写入CSV数据
Jul 28 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
Django中使用Celery的方法步骤
Dec 07 Python
matlab xlabel位置的设置方式
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
python 实现图与图之间的间距调整subplots_adjust
Jupyter notebook 不自动弹出网页的解决方案
Python破解极验滑动验证码详细步骤
详解python字符串驻留技术
Jupyter notebook 更改文件打开的默认路径操作
You might like
PHP面试题之文件目录操作
2015/10/15 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
django之常用命令详解
2016/06/30 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python中的集合介绍
2019/01/28 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
Python如何在bool函数中取值
2020/09/21 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
给排水专业应届生求职信
2013/10/12 职场文书
班级文化标语
2014/06/23 职场文书
德育标兵事迹材料
2014/08/24 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python