Python 开发入门

一、Python简介

Python 是一种易于学习又功能强大的编程语言。它提供了高效的高层次的数据结构,还有简单有效的面向对象编程特性。Python 优雅的语法和动态类型,以及解释型语言的本质,使它成为诸多领域脚本开发的理想语言。

同时,Python 解释器易于扩展,可以使用 C 或 C++(或者其他可以从 C 调用的语言)扩展新的功能和数据类型,并且Python还可以用作可定制化软件中的扩展程序语言。除此之外,多数平台上的 Python 解释器以及丰富的标准库的源码和可执行文件,都可以在 Python 官网免费自由地进行下载。

和其他脚本语言一样,Python 本身也是由诸多其他语言发展而来,并且借鉴了包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言的诸多优点。相比其他的脚本语言,Python具有如下的一些特点:

  • 易于学习和阅读:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单,并且Python的代码结构简单且易于阅读。
  • 易于维护:Python的成功在于它的源代码是相当容易维护的。
  • 广泛的标准库支持:Python的最大的优势之一是拥有丰富的跨平台的标准库,并且在UNIX,Windows和Macintosh兼容很好。
  • 强大的可扩展能力:如果你想要编写一些不愿开放的算法或者模块,你可以使用C或C++完成相应功能开发,然后在你的Python程序中调用。
  • 可移植:基于其开放源代码的特性,Python支持多平台移植。
  • 数据库支持:Python提供所有主要的商业数据库的接口。
  • GUI编程:Python支持GUI编程,并且开发的程序可以移植到多个系统中使用。

二、MAC 平台安装Python

Mac OS X 10.8以上的系统都附带安装了Python 2.7,不过Python 2.7已经很旧,很多API不支持。 建议从 Python 网站( www.python.org )安装 Python 3.7及以上版本 。

在这里插入图片描述 安装完成之后的东西有:

  • 会有一个 Python 3.9 文件夹在你的 Applications 文件夹中。 在这里你可以找到 IDLE,它是作为官方 Python 发行版标准组成部分的开发环境;以及 PythonLauncher,它负责处理在 Finder 中双击 Python 脚本的操作。
  • 框架 /Library/Frameworks/Python.framework ,包括 Python 可执行文件和库。安装程序将此位置添加到 shell 路径,Python 可执行文件的符号链接放在 /usr/local/bin/ 中。

同时,Apple 提供的 Python 版本分别安装在/System/Library/Frameworks/Python.framework 和 /usr/bin/python 中。需要说明的是,永远不要修改或删除这些内容,因为它们由 Apple 控制并由 Apple 或第三方软件使用。

等待Python安装完成,然后打开系统的./bash_profile文件注册Python,在终端执行open -e .bash_profile命令打开.bash_profile文件,然后添加如下脚本:

bash

复制代码export PATH="/Library/Frameworks/Python.framework/Versions/3.9/bin:${PATH}"

然后,再终端执行如下脚本命令。

bash复制代码alias python="/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9"
source .bash_profile

执行完成之后,在使用python -V 查看最新版本就可以看到已经更新了。 在这里插入图片描述

三、开发工具

支持Python开发的工具有Jupyter notebook、Pycharm、Subllime/Vs code/Atom + kite等。

3.1 Jupyter notebook

Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。通过pip安装之后在命令行输入jupyter notebook会在默认浏览器打开。在有些Python开发者眼里,jupyter notebook是最好的IDE,因为它把Python的交互式特性发挥到了极致,它主要有如下优点:

  • 可共享
  • 支持40多种编程语言
  • 轻量
  • 交互式
  • 优秀的可视化服务
  • 支持Markdown

3.2 Pycharm

PyCharm是由JetBrains打造的一款Python IDE,VS2010的重构插件Resharper就是出自JetBrains之手。和其他的开发一样,PyCharm支持常见的代码补全、智能提示、语法检查,这个软件都支持,除此之外,还集成了版本控制、单元测试、git功能,可以快速创建Django,Flask等Python Web框架,使用起来非常不错,在开发大型项目中经常会用到,唯一的缺点就是,启动起来有些卡,还不是免费的,不过可以下载社区免费版的。

3.3 Subllime/Vs code/Atom + kite

Sublime Text这是一个轻量级的代码编辑器,跨平台,支持几十种编程语言,包括Python,Java,C/C++等,小巧灵活,运行轻快,支持代码高亮、自动补全、语法提示,插件扩展丰富,是一个很不错的代码编辑器,配置相关文件后,可直接运行python程序。

VS Code这是微软开发的一个跨平台的代码编辑器,支持常见的编程语言开发,插件拓展丰富,不仅智能补全、语法检查、代码高亮,还支持git功能,运行流畅,是一个很不错的代码编辑器,安装相关插件后,可直接运行python程序。

Atom这是github专门为程序员开发的一个代码编辑器,也是款平台的,界面简洁直观,使用起来非常方便,自动补全、代码高亮、语法提示,启动运行速度较快,对于初学者来说,是一个很不错的代码编辑器。

四、运行Python

目前,有三种方式可以运行Python:

4.1 交互式解释器

我们可以通过命令行窗口进入 Python,然后在交互式解释器中开始编写 Python 代码,然后可以在 Unix、DOS 或任何其他提供了命令行或者 shell 的系统进行 Python 编码工作。

ruby复制代码$ python # Unix/Linux
或者
C:>python # Windows/DOS

Python命令行常见的参数有:

  • -d:在解析时显示调试信息
  • -O:生成优化代码 ( .pyo 文件 )
  • -S:启动时不引入查找Python路径的位置
  • -V:输出Python版本号
  • -X:从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时
  • -c cmd 执行 Python 脚本,并将运行结果作为 cmd 字符串
  • file 在给定的python文件执行python脚本

4.2 命令行脚本

在应用程序中通过引入解释器可以在命令行中执行Python脚本,如下所示:

ruby复制代码$ python script.py # Unix/Linux
或者
C:>python script.py # Windows/DOS

注意:在执行脚本时,请注意检查脚本是否有可执行权限。

4.3 集成开发环境

PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系统,点击面板上的运行按钮就可以运行Python程序了。 在这里插入图片描述

五、使用Requests实现网页爬虫

5.1 网络爬虫基本原理

所谓爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。其背后的基本原理是爬虫程序向目标服务器发起 HTTP 请求,然后目标服务器返回响应结果,爬虫客户端收到响应并从中提取数据,再进行数据清洗、数据存储工作。

所以,网络爬虫也是一个 HTTP 请求的过程。以浏览器访问一个网址为例,从用户输入 URL 开始,客户端通过 DNS 解析查询到目标服务器的 IP 地址,然后与之建立 TCP 连接,连接成功后,浏览器构造一个 HTTP 请求发送给服务器,服务器收到请求之后,从数据库查到相应的数据并封装成一个 HTTP 响应,然后将响应结果返回给浏览器,浏览器对响应内容进行数据解析、提取、渲染并最终展示到用户面前。完整的流程如下:

在这里插入图片描述

需要说明的是,HTTP 协议的请求和响应都必须遵循固定的格式,只有遵循统一的 HTTP 请求格式,服务器才能正确解析不同客户端发的请求,同样地,服务器遵循统一的响应格式,客户端才得以正确解析不同网站发过来的响应。

5.2 网页爬虫例子

Python 提供了非常多工具去实现 HTTP 请求,但第三方开源库提供的功能更丰富,开发者无需从 Socket 通信开始编写。

发起请求之前,首先要构建请求对象 Request,指定 url 地址、请求方法、请求头,这里的请求体 data 为空,因为我们不需要提交数据给服务器,所以可以不指定。urlopen 函数会自动与目标服务器建立连接,发送 HTTP 请求,该函数的返回值是一个响应对象 Response,里面有响应头信息,响应体,状态码之类的属性。

但是,Python 提供的这个内建模块过于低级,需要写很多代码,使用简单爬虫可以考虑 Requests,Requests 在GitHub 有近30k的Star,是一个很Pythonic的框架。

下面是使用Python内建模块 urllib 请求一个 URL 代码示例代码。

ini复制代码import ssl
from urllib.request import Request, urlopen

def print_hi():
    context = ssl._create_unverified_context()
    request = Request(url="https://foofish.net/pip.html",
                      method="GET",
                      headers={"Host": "foofish.net"},
                      data=None)

    response = urlopen(request, context=context)
    headers = response.info()  # 响应头
    content = response.read()  # 响应体
    code = response.getcode()  # 状态码
    print(headers)
    print(content)
    print(code)

if __name__ == '__main__':
    print_hi()

执行上面的代码,就可以看到在Python的控制台打印出了抓取到的信息: 在这里插入图片描述

接下来,让我们来熟悉一下Pythonic框架的使用流程和方式。

5.2.1 安装 requests

requests的安装很简单,使用pip 的install命令即可。

复制代码pip install requests

5.2.2 基本请求

GET请求 基础的GET请求比较简单,只需要使用requests的get()方法请求即可。

ini复制代码    import requests

    url = ''
    headers = {'User-Agent':''}
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8'
    print(res.text)

POST请求 POST请求也很简单,只需要使用requests的post()方法请求即可。

ini复制代码  ...
  data = {}
  res = requests.post(url, headers=headers, data=data)
  ...

5.2.3 高级请求

请求参数 在前端开发中,GET请求带参数所需的参数是拼接在请求地址的后面的,而Python使用的GET请求则是使用params的方式。

csharp复制代码    ...
    params = {}
    res = request.get(url, headers=headers, params = params)
    ...

指定Cookie 模式cookie登录:

csharp复制代码    ...
    headers = {
        'User-Agent' : '',
        'Cookie'     : '',
    }
    res = request.get(url, headers=headers)
    ...

Session 如果想和服务器一直保持登录(会话)状态,而不必每次都指定 cookies,那么可以使用 session,Session 提供的API和 requests 是一样的。

css复制代码import requests

s = requests.Session()
s.cookies = requests.utils.cookiejar_from_dict({"a": "c"})
r = s.get('http://httpbin.org/cookies')
print(r.text)
# '{"cookies": {"a": "c"}}'

r = s.get('http://httpbin.org/cookies')
print(r.text)
# '{"cookies": {"a": "c"}}'

客户端验证

Web客户端验证的时候,一般会带有auth字段,如下所示。

ini复制代码    ...
    auth = ('用户名', '密码')
    res = request.get(url, headers=headers, auth=auth)
    ...

设置超时 有时候,我们需要给请求指定超时时间,那么可以指定 timeout 字段来进行设置,如下所示。

bash

复制代码requests.get('https://google.com', timeout=5)

设置代理 一段时间内发送的请求太多容易被服务器判定为爬虫,所以很多时候我们使用代理IP来伪装客户端的真实IP,比如。

rust复制代码import requests

proxies = {
    'http': 'http://127.0.0.1:1080',
    'https': 'http://127.0.0.1:1080',
}

r = requests.get('http://www.kuaidaili.com/free/', proxies=proxies, timeout=2)

5.2.3 小试牛刀

介绍了上面的基础之后,接下来我们使用Requests完成一个爬取知乎专栏文章为例。 我是怎么找到的?就是逐个点击左侧的请求,观察右边是否有数据出现,那些以 .jpg,js,css 结尾的静态资源可直接忽略,如下图。 在这里插入图片描述 这些对于前端开发来说,这都不是什么技巧。然后我们将请求拷贝到浏览器,发现真的可以使用它获取对应的数据。接下来,我们分析一下这个请求是怎么构成的。 在这里插入图片描述

  • 请求URL:www.zhihu.com/api/v4/memb…
  • 请求方法:GET
  • Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Mobile Safari/537.36
  • 查询参数: type: answer column_id: c_1413092853995851776

有了这些请求数据,我们就可以使用requests这个库来构建一个请求,然后通过Python代码来抓取网络数据,如下所示。

python复制代码import requests


class SimpleCrawler:
    def crawl(self, params=None):
        # 必须指定UA,否则知乎服务器会判定请求不合法
        url = "https://www.zhihu.com/api/v4/members/6c58e1e8c4d898befed2fafeb98adafe/profile/creations/feed"
        # 查询参数
        params = {"type": 'answer',
                  "column_id": 'c_1413092853995851776'}

        headers = {
            "authority": "www.zhihu.com",
            "user-agent": "Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Mobile Safari/537.36",
        }
        response = requests.get(url, headers=headers, params=params)
        print("返回数据:", response.text)
        # 解析返回的数据
        for follower in response.json().get("data"):
            print(follower)

if __name__ == '__main__':
    SimpleCrawler().crawl()

然后,运行上面的代码,输出的结果如下:

在这里插入图片描述

上面是一个基于 Requests 的单线程爬虫,非常简单。通过这个例子,我们明白了它的使用方法和流程。可以看到,requests 是非常灵活,请求头、请求参数、Cookie 信息都可以直接指定在请求方法中,返回值 response 如果是 json 格式可以直接调用json()方法返回 python 对象。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值