博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫入门教程 26-100 知乎文章图片爬取器之二
阅读量:4361 次
发布时间:2019-06-07

本文共 1805 字,大约阅读时间需要 6 分钟。

1. 知乎文章图片爬取器之二博客背景

昨天写了知乎文章图片爬取器的一部分代码,针对知乎问题的答案json进行了数据抓取,博客中出现了部分写死的内容,今天把那部分信息调整完毕,并且将图片下载完善到代码中去。

首先,需要获取任意知乎的问题,只需要你输入问题的ID,就可以获取相关的页面信息,比如最重要的合计有多少人回答问题。

问题ID为如下标红数字
29024583

编写代码,下面的代码用来检测用户输入的是否是正确的ID,并且通过拼接URL去获取该问题下面合计有多少答案。

import requestsimport reimport pymongoimport timeDATABASE_IP = '127.0.0.1'DATABASE_PORT = 27017DATABASE_NAME = 'sun'client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT)db = client.sundb.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( '
') 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中,我们采用简单的正则表达式将他匹配出来。细节如下图展示

在这里插入图片描述

编写代码吧,下面的代码注释请仔细阅读,中间有一个小BUG,需要手动把pic3修改为pic2这个地方目前原因不明确,可能是我本地网络的原因,还有请在项目根目录先创建一个imgs的文件夹,用来存储图片

def download_img(self,data):        ## 下载图片        for item in data["data"]:            content = item["content"]            pattern = re.compile('
') imgs = pattern.findall(content) if len(imgs) > 0: for img in imgs: match = re.search('

运行结果为

在这里插入图片描述

然后在玩知乎的过程中,发现了好多好问题

在这里插入图片描述

168595d956b8016c?w=432&h=645&f=gif&s=3819246

转载于:https://www.cnblogs.com/happymeng/p/10280461.html

你可能感兴趣的文章
选课系统
查看>>
最简实例演示asp.net5中用户认证和授权(2)
查看>>
ubuntu rhythmbox乱码解决方法
查看>>
LeetCode题解之Univalued Binary Tree
查看>>
线程池学习研究-(自实现)2
查看>>
ubuntu下安装新字体
查看>>
Django连接MySQL数据库
查看>>
漫游Kafka入门篇之简单介绍(1)
查看>>
redis学习之旅-初识Redis
查看>>
WinForm 小程序 NotePad
查看>>
JSTL 核心标签库 使用
查看>>
线程池ThreadPool
查看>>
hibernate入门实例
查看>>
WPF路由事件二:路由事件的三种策略(转)
查看>>
Java中的内存泄露
查看>>
asp.net 自定义控件验证FCKeditor是否为空
查看>>
oracle 查看表空间的脚本
查看>>
Python 描述符是什么?以及如何实现
查看>>
程序员的激情其实是一种痛苦
查看>>
MySQL后台线程的清理工作
查看>>