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的*args和**kwargs用法
Nov 01 Python
在Python的Django框架下使用django-tagging的教程
May 30 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
详细介绍python类及类的用法
May 31 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 Python
Python内置的数据类型及使用方法
Apr 13 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可变函数学习小结
2015/11/29 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
vue实现todolist单页面应用
2017/04/11 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
js new Date()实例测试
2019/10/31 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
js实现网页随机验证码
2020/10/19 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
Python Matplotlib库入门指南
2015/05/18 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
使用Python更换外网IP的方法
2018/07/09 Python
python实现简单http服务器功能
2018/09/17 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
请说出几个常用的异常类
2013/01/08 面试题
什么是TCP/IP
2014/07/27 面试题
在校生钳工实习自我鉴定
2013/09/19 职场文书
中青班党性分析材料
2014/02/16 职场文书
中考标语大全
2014/06/05 职场文书
班级课外活动总结
2014/07/09 职场文书
租房协议书
2014/09/12 职场文书
2015年导购员工作总结
2015/04/25 职场文书
初中同学会致辞
2015/08/01 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书