今天有请 大哥的CS小弟给大家讲
老司机爬虫!
意外不意外,
惊喜不惊喜?
本篇适用于,
想学爬虫,
也有一丢丢Python基础的,
小白2.0们。
老司机开车,
上车请坐稳!
⼤哥: 快看快看,这个⼩姐姐腿好长好⽩!
我: 唉,知乎现在是世风⽇下,好好的问答社区,你说你们这些⼈怎么就喜欢看低俗的⼩H图?你还是个已婚人妻!!!
⼤哥: 哇,⼿机内存不够了,⽤电脑保存⼩姐姐们的照⽚吧。
我: 我说,你们看就看吧,还要⼀个个右键点开图⽚保存⾼清⼤图。。。
⼤哥: 好⿇烦啊,⼏百张图⽚我⼿都撸酸了,嘿嘿嘿。。。
我: 什么?还想要偷懒?问我有没有简单的办法,可以⼀次性下载完所有图⽚?
⼤哥: 双眼布灵布灵(可怜状)。。。
我: 好吧,其实呢,我是不屑于看这些低俗的⼩H图的。但既然你们这么求我,我就勉为其难地写个爬⾍代码,满⾜⼀下你们饥渴的⼼灵。。。
# ***大哥:以上全为小弟yy的对话场景 🙄🙄🙄 ***
0. 你以为第一件事情就是要学习知识,搭建环境么?当然不是,第⼀件事情当然是确⽴⽬标,睁⼤双眼,发现这个世界的美,嘿嘿嘿。。。我呢,给你们先列⼏个知乎问题链接,先点进去看看,你们肯定会回来努⼒学习的(围笑)。
你的⽇常搭配是什么样⼦?
https://www.zhihu.com/question/35931586
⾝材好是⼀种怎样的体验?
https://www.zhihu.com/question/26037846
拍照时怎样摆姿势好看?
https://www.zhihu.com/question/19671417
⼥性胸部过⼤会有哪些困扰与不 便?
https://www.zhihu.com/question/20196263
腿长是⼀种什么体验?
https://www.zhihu.com/question/28481779
⼥⽣腿好看胸平是⼀种什么体验?
https://www.zhihu.com/question/61235373
短发⼥孩要怎么拍照才性感?
https://www.zhihu.com/question/46458423
1. ⾸先,你要在电脑⾥安装 python 的环境,我会提供2.7和3.6两个版本的代码,
但是本⽂只以python3.6版本为例。
我建议不管是Win还是Mac⽤户,都最好下载⼀个 anaconda ,⽤于管理python库和环境。
安装完成后,打开你电脑的终端(Terminal)执⾏以下命令:
2. 因为知乎⽹站前端是⽤ react 搭建的,页⾯内容随着⽤户⿏标滚轴滑动、点击
依次展现,为了获取海量的图⽚内容,我们需要⽤ selenium 这个 lib 模拟⽤户对浏览
器进⾏滑动点击等操作。
pip install -U selenium
下载安装完成后,我建议⼤家打开上⾯的链接,阅读⼀下 selenium 的使⽤⽅法。意思⼤致为,为了运⾏ selenium,我们需要安装⼀个 chrome 的 driver ,下载完成后,对于 Mac ⽤户,直接把它复制到/usr/bin或者/usr/local/bin,当然你也可以⾃定义并添加路径。对于 Win ⽤户,也是同理。
Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/
3. 在爬⾍的时候我们经常会发现⽹页都是经过压缩去掉缩进和空格的,页⾯结构会很不清晰,这时候我们就需要⽤ B eautifulSoup 这个 lib 来进⾏html ⽂件结构化。
pip install beautifulsoup4
2.0 Import Libraries
2.1 确定目标URL
2.2 模拟滚动点击操作
在 main 函数⾥我们定义⼀个重复执⾏的函数,来进⾏滚动和点击的操作。⾸先我们可以⽤driver.execute_scrip来进⾏滚动操作。通过观察,我们发现知乎问题底部有⼀个“查看更多回答的”的按钮,如下图。因此我们可以⽤driver.find_element_by_css_selector来选中这个按钮,并点击。为了爱护⼩朋友们的⾝体,我们这⾥只爬取五个页⾯的图⽚。其实,五个页⾯,100个回答,往往都能有1000张图⽚了。。。
仔细看下图高亮处:
2.3 结构化HTML页面并保存
我们每次爬取页⾯信息,要做的第⼀件事就是把页⾯ HTML 存储下来。为了⽅便我们⾁眼浏览,这时候就需要⽤beautifulSoup把压缩后的 HTML ⽂件结构化并保存。
2.4 爬取知乎问题回答里的 nodes
要知道,在我们每次想要爬取页⾯信息之前,要做的第⼀件事就是观察,观察这个页⾯的结构,量⾝⽽裁。⼀般每个页⾯⾥都有很多个图⽚,⽐如在这个知乎页⾯⾥,有很多⽤户头像以及插⼊的图⽚。但是我们这⾥不想要⽤户头像,我们只想要要回答问题⾥的照⽚,所以不能够直接爬取所有 的照⽚。通过观察,我发现每⼀个图⽚附近都会有⼀个的node,⾥边不仅有缩略图 URL 还有⾼清原图的 URL。因此,我为了偷懒,就直接把所有给爬了下来。仔细观察,你会发现每个的<>都是被 escape(HTML entity 转码)了的,所以要⽤html.parser.unescape进⾏解码。
转码后,结果如下(琳琅满目的高清无码大图URL):
2.5 下载图片
有了 img 的所有 node,下载图⽚就轻松多了。⽤⼀个 urllib.request.urlretrieve就全部搞定。这⾥我又做了⼀点清理,把所有的 url 单独存了⼀下,并⽤序号标记,你也可以不要这⼀步直接下载。
2.6 您好,您的小H图大礼包已送达!
成功后,你会看到以下消息。然后你就可以孤身一人躲在被窝里嘿嘿嘿 了。。。
# ***大哥:小弟变成这样真的不是我教的🙄🙄🙄 ***
因为考虑到肖像问题,只展示图库的冰山一小角(不露脸的),随便给吃瓜群众们展示一下:
习惯性衣来伸手饭来张口的客官们!
代码已经给爷准备好了:
https://github.com/huntingzhu/webcrawler
Python 2.7和Python 3.6的代码都有......
今天的内容,各位客官们还满意否?
TECHNICAL WRITER/翻译志愿者
职责:
深度讨论数据应用
调研行业发展
要求:
对数据应用极为感兴趣
具备数据分析基础
具有一定BUSINESS INSIGHT
写作能力强
感兴趣的同学发送 简历 及writing sample 到hr@dataapplab.com ,邮件标题“申请翻译/Technical Writer”。
点击“阅读全文”来瞅一瞅我们厉害的网站吧!