<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python 语言基础 on ClearSec Wiki</title><link>https://www.clearsec.org/wikis/skills/languages/python/</link><description>Recent content in Python 语言基础 on ClearSec Wiki</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://www.clearsec.org/wikis/skills/languages/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Python 包管理</title><link>https://www.clearsec.org/wikis/skills/languages/python/pip/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/languages/python/pip/</guid><description>&lt;h2 id="python-包管理"&gt;Python 包管理&lt;/h2&gt;
&lt;h3 id="前置知识"&gt;前置知识&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;你所使用的操作系统的常用命令行操作&lt;/li&gt;
&lt;li&gt;知道 Python 是什么，以及 Python 如何启动&lt;/li&gt;
&lt;li&gt;知道 Python 可以安装不同的第三方库&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="安装包管理工具"&gt;安装包管理工具&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;pip&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;pip 是用于管理 Python 库的工具，但是安装 Python 时一般并不会自动安装 pip，因此你看需要手动安装。&lt;/p&gt;
&lt;p&gt;你可以使用包管理器安装 &lt;code&gt;python3-pip&lt;/code&gt; 来安装 pip，也可以使用也可以使用官方脚本：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python3 get-pip.py &lt;span class="c1"&gt;# 注意这个地方使用什么版本的 Python 就会安装什么版本的 pip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Conda&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;尽管在前文中我们已经讲过如何安装 Python 解释器，但是在需要复杂的环境管理（或者想要更简单地安装）时，我们常常会用到 Anaconda 或精简版 Miniconda。Anaconda 本⾝⾃带了 UI 以及⼀堆包，体积庞⼤，如果你有兴趣可以选择安装它，此处我要讲的是它的精简版 Miniconda，删掉了⼤量预装包，留下了少数包与管理部分。下⾯的教程针对 Miniconda 而⾔，如果你选择安装 Anaconda 同样可以参考下⾯的教程，因为 Miniconda 的功能是它的⼦集，少了图形界⾯与⼀些预装包。&lt;/p&gt;
&lt;p&gt;下载我推荐⽤ TUNA 源，⾼效便利：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.9.2-Windows-x86_64.exe"&gt;Miniconda3-py39_4.9.2-Windows-x86_64.exe&lt;/a&gt;：Miniconda for Windows&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.9.2-MacOSX-x86_64.sh"&gt;Miniconda3-py39_4.9.2-MacOSX-x86_64.sh&lt;/a&gt;：Miniconda for Mac&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh"&gt;Miniconda3-py39_4.9.2-Linux-x86_64.sh&lt;/a&gt;：Miniconda for Linux&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Windows-x86_64.exe"&gt;Anaconda3-2021.05-Windows-x86_64.exe&lt;/a&gt;：Anaconda for Windows&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-MacOSX-x86_64.sh"&gt;Anaconda3-2021.05-MacOSX-x86_64.sh&lt;/a&gt;：Anaconda for Mac&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh"&gt;Anaconda3-2021.05-Linux-x86_64.sh&lt;/a&gt;：Anaconda for Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意这里的 Mac 只有 x86_64 版本，使用 M1 Mac 的同学暂时无法安装 Conda。&lt;/p&gt;</description></item><item><title>Python 网络请求与爬虫基础</title><link>https://www.clearsec.org/wikis/skills/languages/python/crawler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/languages/python/crawler/</guid><description>&lt;h2 id="python-爬虫"&gt;Python 爬虫&lt;/h2&gt;
&lt;h3 id="前置知识"&gt;前置知识&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;懂得 Python 基本语法，知道如何使用 Python 第三方库&lt;/li&gt;
&lt;li&gt;知道 HTML 的基本结构&lt;/li&gt;
&lt;li&gt;会使用 Chrome 等现代浏览器的开发者工具来查看网页源代码和网络请求信息&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="环境配置"&gt;环境配置&lt;/h3&gt;
&lt;p&gt;需要用到以下一些库：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IPython：理论上没有也行，但是使用 IPython 会提高大家测试的效率&lt;/li&gt;
&lt;li&gt;requests：我装 Python 的时候好像自带了但是这似乎不是标准库&lt;/li&gt;
&lt;li&gt;BeautifulSoup4：解析 HTML 的库，注意&lt;strong&gt;不要&lt;/strong&gt;尝试用正则表达式来处理 HTML，虽然小学期可能会这样做，但是正则表达式并不适于解决 HTML 这种格式&lt;/li&gt;
&lt;li&gt;fake_useragent：生成 User-Agent 的库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;关于 fake_useragent&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个库似乎会尝试自动获取某些在线资源，但是好像需要代理，如果不能征程运行，请下载 &lt;a href="https://cloud.tsinghua.edu.cn/f/289c2fd88d39469e8395/"&gt;fake_useragent.json&lt;/a&gt; 放在一个你能找到的地方，最好放在我们要使用的项目文件的目录下&lt;/p&gt;
&lt;p&gt;在使用时应当添加参数指定资源地址如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ua&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;UserAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./fake_useragent.json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="网络请求"&gt;网络请求&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;终极哲学三大问（服务器视角下的网络请求）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;爬虫为了（自动化地、常常还需要是高速地）获取服务器资源，首先应当了解向服务器发送请求时发生了什么。通常来说一次网络请求的主要内容包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你是谁：User-Agent | Cookies&lt;/li&gt;
&lt;li&gt;你从哪里来：IP&lt;/li&gt;
&lt;li&gt;你来这里干什么：Method 与 Parameter （如果是 POST 请求的话还会有更多内容，但是作为爬虫的话可以略微简化）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在这一过程中服务器可能面临一些攻击（爬虫可能无意间导致这样的问题）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DoS (Denial of Service) attack：拒绝服务攻击，通过构造大量的（尤其是繁重的，也就是 CC 攻击）请求使得服务器“忙不过来”，让服务器无法正常服务。&lt;/li&gt;
&lt;li&gt;DDoS (Distributed Denial of Service) attack：分布式拒绝服务攻击，在 DoS 攻击的基础上改为多个客户端（&lt;del&gt;肉鸡&lt;/del&gt; 用户）同时对目标网站发起大量请求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;尽管谈论攻击有点遥远，但是不妨考虑以下两个情景：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;当你准时到达查询高考成绩时&lt;/li&gt;
&lt;li&gt;当你双十一午夜十二点下单时&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以写爬虫时应该全力避免这种情况！&lt;/p&gt;</description></item></channel></rss>