老司机要开车啦!
正所谓每一个学习 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 干 货