老司机要开车啦!


正所谓每一个学习 Python 爬虫的程序员都有一颗想开车的内心,小编当然也不另外,今天小编将带你上车去知乎上溜达溜达,看看有没有好看的小姐姐,果然不出所料,发现了大量漂亮的小姐姐,那么多好看的长腿小姐姐怎么才能方便到本地随时浏览呢,于是小编抱着纯洁的学术研究心态,发动了自己的车子啦!


确定目标URL:


这是知乎上一个问题链接关于 腿长是一种什么体验?


https://www.zhihu.com/question/28481779


需要的库:


如果不清楚怎么安装的话,请自行百度,Google, 我这里就不再详细介绍了。


from selenium import webdriver
import time
import requests
from bs4 import BeautifulSoup
import html.parser


模拟滚动到底端:


因为知乎上面的文章,是需要手动滑到文章末尾触发进行再次加载的,所以我们这里需要用到 Selenium 模拟人工进行触发更多的信息加载,详细请看代码中的解释!


driver = webdriver.Chrome() # 打开 Chrome 浏览器
driver.get("https://www.zhihu.com/question/28481779"# 打开指定的 URL
for i in range(5):# 向下滑动触发内容加载,5 代表的是触发次数,也可以写成一个函数的形式
   driver.execute_script("window.scrollTo(0, document.body.scrollHeight);"#滑动到浏览器底部,触发加载信息
   time.sleep(3) #等待页面加载时间


解析网址:


这是我们爬取过程中非常重要的一部分,首先我们进行网页的分析,结果发现每一个图片附近都会有一个 <noscript> 的 node,里面包含了高清原图的URL。我们的做法是直接将 <noscript> 爬取下来,仔细观察,你会发现每个 <noscript> 的 <> 都是被 escape(HTML entity 转码)了的,所以我们需要用到 html.parser.unescape 进行解码,详细请看代码中的解释。


source = driver.page_source  # 原网页中 HTML 信息
soup = BeautifulSoup(source,'lxml'# 使用 BeautifulSoup 进行解析
data_in = soup.find_all('noscript'# 找到所有的 <noscript>
data_inner_all = "" #存储全部的 <noscript> 中的 text ,方便之后的解析
for data in data_in:
   data_inner = data.get_text() # 获取 <noscript> 的 text 内容
   data_inner_all += data_inner + "\n"
data_all = html.parser.unescape(data_inner_all) # 将解码成 HTML ,类似于这样 data_all = '<abc>'


保存图片:


接下来就是我们最期待的保存图片了,我们将 HTML 中的 src 全部保存到本地文件夹中,方法很简单,详细请看代码中的解释!


img_soup = BeautifulSoup(data_all,'lxml'# 再次解析 HTML 
imgs = img_soup.find_all('img'# 找到所有的 img 
count = 0  # 用来标记图片数量及作为名字
for img in imgs: # 保存所有的图片
   if img.get('src'is not None# 判断是否包含图片的 url 
       img_url = img.get('src')
       with open('/Users/lec/Desktop/img/' + str(count) + '.jpg','wb+'as f: #保存图片到本地
           f.write(requests.get(img_url).content)
           count += 1
print("Intall images successfully!!!"# 保存成功!


成果展示:


全都是知乎上的大长腿姐姐,如果你有喜欢其他类型的小姐姐,还可以再去溜达溜达的哟,方法已经教给你啦!(图片如有侵权,联系删除!)



文章参考:https://zhuanlan.zhihu.com/p/28680797


完整的代码我已经上传到 Github 上了,点击阅读原文即可跳转!


PS: 1、之前自己准备爬取的代码总是只能获取到问题中第一个答案的图片,参考了上面这篇文章才爬取成功的勒,如果有更好的办法欢迎一起学习交流的,同时各位读者也要注意自己的身体蛤!

2、感觉好久没有更新文章了,实在是自己最近要准备考试了比较忙,希望各位读者海涵的!

3、小编在这里祝大家端午节快乐,同时远在异乡的朋友们,今天记得给家里的父亲打个电话哟!



如果觉得文章还不错的话,还请大家点赞分享下。算是对「fightjiang」最大的支持!



       每 天 分 享 Python 干 货

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值