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的接口测试框架实例
Nov 04 Python
python MySQLdb使用教程详解
Mar 20 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
python版本五子棋的实现代码
Dec 11 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
用Python写一个自动木马程序
Sep 17 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
Python unittest discover批量执行代码实例
Sep 08 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 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中的单引号、双引号和转义字符详解
2017/02/16 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
Javascript Objects详解
2014/09/04 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
浅谈python多线程和队列管理shell程序
2015/08/04 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
Python实现购物车功能的方法分析
2017/11/10 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
使用python为mysql实现restful接口
2018/01/05 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Python中extend和append的区别讲解
2019/01/24 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
生物化工专业个人自荐信
2013/09/26 职场文书
结对共建协议书
2014/08/20 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
单位员工收入证明样本
2014/10/09 职场文书
服务员岗位职责
2015/02/03 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
关于MySQL中的 like操作符详情
2021/11/17 MySQL
如何利用python创作字符画
2022/06/25 Python