Py学习  »  Python

50⾏python爬⾍代码, 带你正确打开知乎新世界!

大数据应用 • 6 年前 • 890 次点击  

今天有请大哥的CS小弟给大家讲

老司机爬虫!


意外不意外,

惊喜不惊喜?


本篇适用于,

想学爬虫,

也有一丢丢Python基础的,

小白2.0们。


老司机开车,

上车请坐稳!


⼤哥:快看快看,这个⼩姐姐腿好长好⽩!


我:唉,知乎现在是世风⽇下,好好的问答社区,你说你们这些⼈怎么就喜欢看低俗的⼩H图?你还是个已婚人妻!!!


⼤哥: 哇,⼿机内存不够了,⽤电脑保存⼩姐姐们的照⽚吧。


我:我说,你们看就看吧,还要⼀个个右键点开图⽚保存⾼清⼤图。。。


⼤哥:好⿇烦啊,⼏百张图⽚我⼿都撸酸了,嘿嘿嘿。。。


我:什么?还想要偷懒?问我有没有简单的办法,可以⼀次性下载完所有图⽚?


⼤哥:双眼布灵布灵(可怜状)。。。


我:好吧,其实呢,我是不屑于看这些低俗的⼩H图的。但既然你们这么求我,我就勉为其难地写个爬⾍代码,满⾜⼀下你们饥渴的⼼灵。。。


# ***大哥:以上全为小弟yy的对话场景🙄🙄🙄 ***






Section 1


准备工作


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库和环境。

  • (Anaconda下载链接)www.continuum.io/downloads

  • (用户手册)conda.io/docs/test-drive.html#managingconda


安装完成后,打开你电脑的终端(Terminal)执⾏以下命令:



2. 因为知乎⽹站前端是⽤ react 搭建的,页⾯内容随着⽤户⿏标滚轴滑动、点击

依次展现,为了获取海量的图⽚内容,我们需要⽤selenium这个 lib 模拟⽤户对浏览

器进⾏滑动点击等操作。

  • https://pypi.python.org/pypi/selenium 

# 利⽤ pip 安装 selenium
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. 在爬⾍的时候我们经常会发现⽹页都是经过压缩去掉缩进和空格的,页⾯结构会很不清晰,这时候我们就需要⽤ BeautifulSoup 这个 lib 来进⾏html ⽂件结构化。

pip install beautifulsoup4


Section 2


代码解释


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

要知道,在我们每次想要爬取页⾯信息之前,要做的第⼀件事就是观察,观察这个页⾯的结构,量⾝⽽裁。⼀般每个页⾯⾥都有很多个图⽚,⽐如在这个知乎页⾯⾥,有很多⽤户头像以及插⼊的图⽚。但是我们这⾥不想要⽤户头像,我们只想要要回答问题⾥的照⽚,所以不能够直接爬取所有 的照⽚。通过观察,我发现每⼀个图⽚附近都会有⼀个




转码后,结果如下(琳琅满目的高清无码大图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/翻译志愿者  

  1. 职责:

    1. 深度讨论数据应用

    2. 调研行业发展

  2. 要求:

    1. 对数据应用极为感兴趣

    2.  具备数据分析基础

    3. 具有一定BUSINESS INSIGHT

    4. 写作能力强

感兴趣的同学发送简历writing samplehr@dataapplab.com,邮件标题“申请翻译/Technical Writer”。



点击“阅读全文”来瞅一瞅我们厉害的网站吧!


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/kHuNX6fJIf
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3034
 
890 次点击