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 相关文章推荐
TensorFlow模型保存和提取的方法
Mar 08 Python
Python反转序列的方法实例分析
Mar 21 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
python pandas时序处理相关功能详解
Jul 03 Python
基于python实现学生信息管理系统
Nov 22 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
python内打印变量之%和f的实例
Feb 19 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
May 11 Python
Pycharm Git 设置方法
Sep 15 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
第九节 绑定 [9]
2006/10/09 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
JS array 数组详解
2009/03/22 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
搭建vue开发环境
2018/07/19 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
Python实现CET查分的方法
2015/03/10 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
Python的in,is和id函数代码实例
2020/04/18 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
自荐信格式简述
2014/01/25 职场文书
向领导表决心的话
2014/03/11 职场文书
企业授权委托书范本
2014/04/02 职场文书
个人整改方案范文
2014/10/25 职场文书
2015年推普周活动方案
2015/05/06 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
Python如何将list中的string转换为int
2022/07/15 Ruby