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中的__future__模块
Apr 27 Python
Python操作列表之List.insert()方法的使用
May 20 Python
Python中的fileinput模块的简单实用示例
Jul 09 Python
python3实现暴力穷举博客园密码
Jun 19 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
Django REST framework内置路由用法
Jul 26 Python
python中几种自动微分库解析
Aug 29 Python
python文件读写代码实例
Oct 21 Python
Python pip配置国内源的方法
Feb 14 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
python实现一个猜拳游戏
Apr 05 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中使用Select 查询语句的实例
2014/02/19 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
jquery trim() 功能源代码
2011/02/14 Javascript
Javascript面向对象编程
2012/03/18 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
Python操作mongodb的9个步骤
2018/06/04 Python
Django框架安装方法图文详解
2019/11/04 Python
Python线程指南分享
2019/11/19 Python
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
公积金单位接收函
2014/01/11 职场文书
授权收款委托书
2014/09/23 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
医院见习报告范文
2014/11/03 职场文书
学术会议通知
2015/04/15 职场文书
关于倡议书的范文
2015/04/29 职场文书
二婚主持词
2015/06/30 职场文书
医院病假条怎么写
2015/08/17 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
担保书范文
2019/07/09 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers