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 相关文章推荐
Python2.5/2.6实用教程 入门基础篇
Nov 29 Python
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
Python栈类实例分析
Jun 15 Python
老生常谈Python基础之字符编码
Jun 14 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
使用Python将语音转换为文本的方法
Aug 10 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
Python几种酷炫的进度条的方式
Apr 11 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/25 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
javascript的事件描述
2006/09/08 Javascript
自动更新作用
2006/10/08 Javascript
js文字滚动停顿效果代码
2008/06/28 Javascript
SWFObject Flash js调用类
2008/07/08 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
优秀生推荐信范文
2013/11/28 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
个人承诺书格式
2014/06/03 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
演讲比赛主持词
2015/06/29 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers