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文件与文件夹常见基本操作总结
Sep 19 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
python微信公众号开发简单流程
Mar 23 Python
Python将图片转换为字符画的方法
Jun 16 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
python中使用input()函数获取用户输入值方式
May 03 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 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
php5.3 废弃函数小结
2010/05/16 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python几种常用功能实现代码实例
2019/12/25 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
泰国在线书店:SE-ED
2020/06/21 全球购物
给物业的表扬信
2014/01/21 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
爱我中华教学反思
2014/04/28 职场文书
移交协议书
2014/08/19 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
离婚起诉书范本
2015/05/18 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL