一、Python简介Python是一门简单易学、功能强大的编程语言。它提供高效的高级数据结构,以及简单有效的面向对象编程特性。Python优雅的语法和动态类型,以及它的解释性质,使其成为许多领域脚本编写的理想语言。同时,Python解释器易于扩展,可以使用C或C++(或其他可以从C调用的语言)扩展新的功能和数据类型,Python也可以作为扩展编程语言在可定制的软件。此外,大多数平台上的Python解释器和丰富的标准库的源代码和可执行文件都可以从Python官网免费下载。与其他脚本语言一样,Python本身是从许多其他语言发展而来的,并借鉴了脚本语言的许多优点,包括ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unixshell等。与其他脚本语言相比,Python具有以下特点:易学易读:Python关键字相对较少,结构简单,语法明确,易于学习,Python代码结构简单易懂读书。易于维护:Python的成功在于其源代码相当易于维护。广泛的标准库支持:Python最大的优势之一是它拥有丰富的跨平台标准库,并且与UNIX、Windows和Macintosh的兼容性非常好。强大的扩展性:如果你想写一些你不想公开的算法或模块,你可以使用C或C++完成相应的功能开发,然后在你的Python程序中调用。可移植性:基于其开源特性,Python支持多平台移植。数据库支持:Python提供了所有主要商业数据库的接口。GUI编程:Python支持GUI编程,开发的程序可以移植到多个系统上使用。2.在MAC平台安装Python。MacOSX10.8及以上系统安装了Python2.7,但是Python2.7很老,很多API都不支持。建议从Python网站(https://www.python.org)安装Python3.7及以上版本。安装完成后,在你的Applications文件夹下会有一个Python3.9的文件夹。在这里,您会找到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文件,然后添加如下脚本:exportPATH="/Library/Frameworks/Python.framework/Versions/3.9/bin:${PATH}"然后在终端执行以下脚本命令。aliaspython="/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9"source.bash_profile执行完成后使用python-V查看最新版本可以看到已经更新.3、开发工具支持Python开发的工具有Jupyternotebook、Pycharm、Subllime/Vscode/Atom+kite等3.1JupyternotebookJupyterNotebook以网页形式打开,可以直接编写代码并运行代码在网页中,代码的运行结果也会直接显示在代码块的下方。通过pip安装后,在命令行输入jupyternotebook,会在默认浏览器中打开。在一些Python开发者眼中,jupyternotebook是最好的IDE,因为它最大限度地发挥了Python的交互特性。它主要有以下优点:可以共享和支持40多种编程语言。轻量级交互和优秀的可视化服务支持Markdown安装参考:JupyterNotebook介绍、安装和使用教程3.2PycharmPyCharm是JetBrains打造的PythonIDE,VS2010重构插件Resharper出自JetBrains。与其他开发一样,PyCharm支持通用代码补全、智能提示和语法检查。该软件支持所有这些。此外,它还集成了版本控制、单元测试、git功能,可以快速创建Django、Flask等Pythonweb框架,非常好用。常用于大型项目的开发。唯一的缺点是启动时有一些滞后。它不是免费的,但您可以下载社区免费版本。对于付费版的问题,可以使用以下方法解决:JetBrainunlimitedreset30-daytrialperiodtechnique。3.3Sublime/Vscode/Atom+kiteSublimeText这是一款轻量级的代码编辑器,跨平台,支持数十种编程语言,包括Python、Java、C/C++等。明亮、自动补全、语法提示、丰富的插件inextensions,是一个非常不错的代码编辑器,配置好相关文件后,就可以直接运行python程序了。VSCode是微软开发的跨平台代码编辑器。支持常用编程语言的开发,具有丰富的插件扩展。不仅支持智能补全、语法检查、代码高亮,还支持git功能,运行流畅。这是一个非常好的工具。代码编辑器,安装相关插件后,可以直接运行python程序。Atom是github专门为程序员开发的代码编辑器。它也是一个平台。界面简洁直观,使用起来非常方便。它具有自动完成、代码突出显示和语法提示。它启动和运行得更快。对于初学者来说,是一个很好的代码编辑器。4、运行Python目前运行Python的方式有以下三种:4.1交互式解释器我们可以通过命令行窗口进入Python,然后在交互式解释器中开始编写Python代码,然后就可以在Unix、DOS或者任何其他提供的用于Python编码工作的命令行或shell系统。$python#Unix/LinuxorC:>python#Windows/DOSPython命令行常用参数有:-d:解析时显示调试信息-O:生成优化代码(.pyo文件)-S:启动时不引入搜索Python路径位置-V:输出Python版本号-X:Obsoletebasedonbuilt-inexceptions(onlyforstrings)sinceversion1.6-ccmd执行Python脚本,运行结果作为cmd中的字符串文件给定指定的python文件执行python脚本4.2命令行脚本在应用程序中,可以引入解释器在命令行执行Python脚本,如下:$pythonscript.py#Unix/LinuxorC:>pythonscript.py#Windows/DOS注意事项:执行脚本时,请注意检查脚本是否具有可执行权限。4.3集成开发环境PyCharm是JetBrains打造的PythonIDE,支持macOS、Windows、Linux系统。您可以通过单击面板上的运行按钮来运行Python程序。5.使用Requests实现网络爬虫5.1网络爬虫的基本原理所谓爬虫就是按照一定的规则自动从万维网上抓取信息的程序或脚本。其背后的基本原理是爬虫程序向目标服务器发起HTTP请求,然后目标服务器返回响应结果,爬虫客户端接收响应并从中提取数据,然后进行数据清洗和数据存储.因此,网络爬取也是一个HTTP请求的过程。以浏览器访问网站为例。从用户输入URL开始,客户端通过DNS解析查询目标服务器的IP地址,然后与之建立TCP连接。连接成功后,浏览器构造HTTP请求发送给服务器。收到请求后,从数据库中找到相应的数据,封装成HTTP响应,然后将响应结果返回给浏览器。浏览器解析、提取、渲染并最终将响应内容显示给用户。完整的流程如下:需要注意的是HTTP协议的请求和响应都必须遵循固定的格式。服务器只有遵循统一的HTTP请求格式,才能正确解析不同客户端发送的请求。同样,服务器遵循统一的响应格式,客户端可以正确解析不同网站发送的响应。5.2网络爬虫示例Python提供了很多实现HTTP请求的工具,但是第三方开源库提供的功能更多,开发者不需要从Socket通信开始编写。在发起请求之前,首先构造请求对象Request,指定url地址、请求方法、请求头。这里的请求体数据为空,因为我们不需要向服务器提交数据,所以不需要指定。urlopen函数将自动与目标服务器建立连接并发送HTTP请求。该函数的返回值是一个响应对象Response,包含响应头信息、响应体、状态码等属性。但是Python提供的内置模块太底层,需要写很多代码。使用简单的爬虫可以考虑Requests。Requests在GitHub上有近30kStars,是一个非常Pythonic的框架。以下是使用Python内置模块urllib请求URL代码的示例代码。导入sslfromurllib.request导入请求,urlopendefprint_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()#responseheadercontent=response.read()#responsebodycode=response.getcode()#状态码print(headers)print(content)print(code)if__name__=='__main__':print_hi()执行上面的代码,可以看到在Python控制台打印了抓取到的信息:接下来,让熟悉使用Pythonic框架的流程和方法。5.2.1安装requestsrequests的安装非常简单,使用pip的install命令即可。pipinstallrequests5.2.2基本请求GET请求基本GET请求比较简单,直接使用requests的get()方法进行请求即可。importrequestsurl=''headers={'User-Agent':''}res=requests.get(url,headers=headers)res.encoding='utf-8'print(res.text)POST请求POST请求很简单,直接用requests的post()方法去请求就行了。...data={}res=requests.post(url,headers=headers,data=data)...5.2.3高级请求请求参数在前端开发中,带参数的GET请求需要的参数串接在request后面的地址,Python使用的GET请求就是使用params的方式。...params={}res=request.get(url,headers=headers,params=params)...指定cookie模式cookie登录:...headers={'User-Agent':'','Cookie':'',}res=request.get(url,headers=headers)...Session如果你想一直登录(session)到服务器而不需要每次都指定cookies,可以使用session,Session提供的API它与请求相同。导入请求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字段,如下图。...auth=('username','password')res=request.get(url,headers=headers,auth=auth)...settimeout有时候,我们需要为请求指定一个超时时间,这样我们就可以指定超时字段设置如下所示。requests.get('https://google.com',timeout=5)设置代理在一段时间内发送过多的请求容易被服务器判断为爬虫,所以我们经常使用代理IP来伪装客户端的真实IP,例如.importrequestsproxies={'http':'http://127.0.0.1:1080','https':'http://127.0.0.1:1080',}r=requests.get('http://www.kuaidadaili.com/free/',proxies=proxies,timeout=2)5.2.3小测试介绍了以上基础之后,我们以使用Requests完成一篇知乎专栏文章的爬取为例。我是怎么找到的就一个一个点左边的requests,右边观察有没有数据。那些以.jpg、js、css结尾的静态资源可以直接忽略,如下图。这些不是前端开发的技能。然后我们把请求复制到浏览器,发现真的可以用它来获取对应的数据。接下来我们分析一下这个请求是如何构成的。请求地址:https://www.zhihu.com/api/v4/members/6c58e1e8c4d898befed2fafeb98adafe/profile/creations/feed?type=answer&column_id=c_1413092853995851776请求方式:GETMozilla/5.0(Linux;Android6.0.1;MotoG(4))AppleWebKit/537.36(KHTML,likeGecko)Chrome/92.0.4515.159MobileSafari/537.36Queryparameters:type:answercolumn_id:c_1413092853995851776有了这些请求数据,我们就可以使用requests库构建一个请求,然后通过Python了抓取网络数据的代码如下所示。importrequestsclassSimpleCrawler:defcrawl(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;Android6.0.1;MotoG(4))AppleWebKit/537.36(KHTML,likeGecko)Chrome/92.0.4515.159MobileSafari/537.36",}response=requests.get(url,headers=headers,params=params)print("Returndata:",response.text)#在response.json().get("data")中解析follower的返回数据:print(follower)if__name__=='__main__':SimpleCrawler().crawl()然后,运行上面的代码,输出结果如下:上面是一个基于Requests的单线程爬虫,非常简单。通过这个例子,我们了解了它的用法和过程。如您所见,请求非常灵活。可以直接在请求方法中指定请求头、请求参数和cookie信息。如果返回值response是json格式,可以直接调用json()方法返回一个python对象。
