Python爬取知乎图片代码实现解析


Posted in Python onSeptember 17, 2019

首先,需要获取任意知乎的问题,只需要你输入问题的ID,就可以获取相关的页面信息,比如最重要的合计有多少人回答问题。

问题ID为如下标红数字

编写代码,下面的代码用来检测用户输入的是否是正确的ID,并且通过拼接URL去获取该问题下面合计有多少答案。

import requests
import re
import pymongo
import time
DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.zhihuone # 准备插入数据
BASE_URL = "https://www.zhihu.com/question/{}"
def get_totle_answers(article_id):
  headers = {
    "user-agent": "需要自己补全 Mozilla/5.0 (Windows NT 10.0; WOW64)"
  }
  with requests.Session() as s:
    with s.get(BASE_URL.format(article_id),headers=headers,timeout=3) as rep:
      html = rep.text
      pattern =re.compile( '<meta itemProp="answerCount" content="(\d*?)"/>')
      s = pattern.search(html)
      print("查找到{}条数据".format(s.groups()[0]))
      return s.groups()[0]
if __name__ == '__main__':
  # 用死循环判断用户输入的是否是数字
  article_id = ""
  while not article_id.isdigit():
    article_id = input("请输入文章ID:")
  totle = get_totle_answers(article_id)
  if int(totle)>0:
    zhi = ZhihuOne(article_id,totle)
    zhi.run()
  else:
    print("没有任何数据!")

完善图片下载部分,图片下载地址在查阅过程中发现,存在json字段的content中,我们采用简单的正则表达式将他匹配出来。细节如下图展示

Python爬取知乎图片代码实现解析

编写代码吧,下面的代码注释请仔细阅读,中间有一个小BUG,需要手动把pic3修改为pic2这个地方目前原因不明确,可能是我本地网络的原因,还有请在项目根目录先创建一个imgs的文件夹,用来存储图片

def download_img(self,data):
    ## 下载图片
    for item in data["data"]:
      content = item["content"]
      pattern = re.compile('<noscript>(.*?)</noscript>')
      imgs = pattern.findall(content)
      if len(imgs) > 0:
        for img in imgs:
          match = re.search('<img src="(.*?)"', img)
          download = match.groups()[0]
          download = download.replace("pic3", "pic2") # 小BUG,pic3的下载不到
          print("正在下载{}".format(download), end="")
          try:
            with requests.Session() as s:
              with s.get(download) as img_down:
                # 获取文件名称
                file = download[download.rindex("/") + 1:]
                content = img_down.content
                with open("imgs/{}".format(file), "wb+") as f: # 这个地方进行了硬编码
                  f.write(content)

                print("图片下载完成", end="\n")
          except Exception as e:
            print(e.args)
      else:
        pass

运行结果为

Python爬取知乎图片代码实现解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用Descriptor实现类级属性(Property)详解
Sep 18 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
解读Python中degrees()方法的使用
May 18 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
CentOS6.5设置Django开发环境
Oct 13 Python
Python 查找字符在字符串中的位置实例
May 02 Python
Django进阶之CSRF的解决
Aug 01 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
python实现图片上添加图片
Nov 26 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Python 串口通信的实现
Sep 29 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 #Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 #Python
Python使用random模块生成随机数操作实例详解
Sep 17 #Python
python同时替换多个字符串方法示例
Sep 17 #Python
python 函数的缺省参数使用注意事项分析
Sep 17 #Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 #Python
Python 实现大整数乘法算法的示例代码
Sep 17 #Python
You might like
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
使用python模拟命令行终端的示例
2019/08/13 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Python如何实现动态数组
2019/11/02 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
德国户外商店:eXXpozed
2020/07/25 全球购物
实习生自我鉴定范文
2013/12/05 职场文书
社区党员先进事迹
2014/01/22 职场文书
运动会广播稿100字
2014/09/14 职场文书
体检通知范文
2015/04/21 职场文书
爱国主义影片观后感
2015/06/18 职场文书
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js