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使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
Python查找第n个子串的技巧分享
Jun 27 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
Python删除n行后的其他行方法
Jan 28 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
python中列表的含义及用法
May 26 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
python实现猜拳游戏项目
Nov 30 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
php5新改动之短标记启用方法
2008/09/11 PHP
PHP 替换模板变量实现步骤
2009/08/24 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php正则表达式学习笔记
2015/11/13 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
JS window.opener返回父页面的应用
2009/10/24 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python 数据结构之队列的实现
2017/01/22 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
Python实现线程状态监测简单示例
2018/03/28 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Python中psutil的介绍与用法
2019/05/02 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
亿企通软件测试面试题
2012/04/10 面试题
应届大学生的推荐信
2013/11/20 职场文书
农民入党思想汇报
2014/01/03 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS