在前面的四篇文章中, 我们一直采用 python 3 自带的 urllib 模块来抓取网页, 然后用 re 模块来处理抓取到的数据. 这次我们使用 Requests 库来代替 urllib, 用 BeautifulSoup 来代替 re 模块.
对于这两个模块来说, 学习使用它们的最好方法是看官方文档, 这两个模块的官方文档都有中文版(翻译的不是很完整).
在 Windows 下如果安装了 Python3, 那么在 cmd 下直接可以通过 pip 来安装这两个模块, 命令如下:
12 | pip install requestspip install beautifulsoup4 |
在 Ubuntu 下安装方法如下:
123 | sudo apt–get install python3–pipsudo pip3 install requestssudo pip3 install beautifulsoup4 |
然后我们运行 Python3, 试一下是否能把这两个模块 import 进来, 就知道是否安装成功了:
123456 | C:\\Users\\Liu>pythonPython 3.4.2 (v3.4.2:ab2c023a9432, OcType \”help\”, \”copyright\”, \”credits\” o>>> import requests>>> from bs4 import BeautifulSoup>>> |
Requests 是 Python 界大名鼎鼎的一个网络库, 其设计哲学是为人类而设计, 所以他提供的功能都非常的人性化. 他的方便对我而言主要有两大点:
Requests 的方便之处不止这两点, 还提供了诸如标准登录接口之类的功能, 我们暂时用不上.
总而言之, 对于使用过 urllib 的我们来说, 用 requests 会感觉我们之前生活在石器时代. 第三方库的强大就在于这里, 这也是 Python 这么火的重要原因.
BeautifulSoup 大大方便了我们对抓取的 HTML 数据的解析, 可以用tag, class, id来定位我们想要的东西, 可以直接提取出正文信息, 可以全文搜索, 同样也支持正则表达式, 相当给力.
我们随便抓取一个页面, 然后用 soup 来解析一下试试他的威力:
12345678910111213141516171819202122232425262728293031 | >>> import requests>>> from bs4 import BeautifulSoup>>> response = requests.get(\”http://jecvay.com\”)>>> soup = BeautifulSoup(response.text) >>> print(soup.title.text)Jecvay Notes – Good luck & Have fun >>> print(soup.body.text)改版策略: 技术博客的真正索引 上周, 我换掉了我博客的主题, 使用 BootStrap 框架自己写了一个. 在自己动手写博客主题之前, 我时常时不时到后台主题商店去翻一翻, 想要发现更好看的主题. 挑选有两种:在一大堆展示面前, 快速浏览, 看到亮眼的就仔细看一看是否满意;自己想好一个目标, 然后用筛选器(或者人肉)筛选出来.阅读全文 >> (...省略若干) >>> for x in soup.findAll(\”a\”):... print(x[\’href\’])...http://jecvay.com/2015/02/the–real–index–of–tech–blog.htmlhttp://jecvay.com/2015/02/the–real–index–of–tech–blog.htmlhttp://jecvay.com/2015/01/wordpress–super–cache.htmlhttp://jecvay.com/2015/01/learning–vps–3.htmlhttp://jecvay.com/2015/01/nobot–anti–webspider.htmlhttp://jecvay.com/2015/01/learning–vps–2.htmlhttp://jecvay.com/2014/12/learning–vps–1.htmlhttp://jecvay.com/2014/11/what–is–min–cut.htmlhttp://jecvay.com/2014/11/compiler–makes–fast–build.html/about–me/archive |
我们十分轻松的获得了全文内容以及所有链接.
在上一篇文章中, 我尝试使用 urllib 和 re 获取了知乎登录页面的 _xsrf 参数, 这次我们通过这两个新的模块再试一次.
打开浏览器隐身模式, 打开知乎网, 来到登录界面, 查看源代码, 搜索 xsrf 字样, 得到如下一行:
1 | <input type=\”hidden\” name=\”_xsrf\” value=\”d4ff8d988193442a774bd0ccff336101\”/> |
于是我们只要两行代码就能搞定:
123 | >>> soup = BeautifulSoup(requests.get(\”http://www.zhihu.com\”).text)>>> print(soup.find(\”input\”, {\”name\”: \”_xsrf\”})[\’value\’])d4ff8d18b293442a764bd0ccff333601 |
第三方库就是这么好用!