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 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
Python编写检测数据库SA用户的方法
Jul 11 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
python读取LMDB中图像的方法
Jul 02 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 Python
python找出因数与质因数的方法
Jul 25 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
Python中的With语句的使用及原理
Jul 29 Python
详解python字符串驻留技术
May 21 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动态生成静态HTML网页的代码
2010/03/04 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
Python 调用DLL操作抄表机
2009/01/12 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
研究生毕业鉴定
2014/01/29 职场文书
3的组成教学反思
2014/04/30 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python