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 解析html之BeautifulSoup
Jul 07 Python
Python实现字典依据value排序
Feb 24 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
python+opencv实现动态物体追踪
Jan 09 Python
python复制文件到指定目录的实例
Apr 27 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
python模块导入的方法
Oct 24 Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 Python
python如何写出表白程序
Jun 01 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 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创建PDF中文文档
2006/10/09 PHP
PHP+MYSQL 出现乱码的解决方法
2008/08/08 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
20个常用Python运维库和模块
2018/02/12 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
教师爱岗敬业演讲稿
2014/05/05 职场文书
党员对照检查材料
2014/09/22 职场文书
2014年个人委托书范本
2014/10/13 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2014年药房工作总结
2014/11/22 职场文书
幼师小班个人总结
2015/02/12 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
运动会加油稿50字
2015/07/21 职场文书