Python爬取知乎图片代码实现解析
作者:Python学习汇 发布时间:2023-02-22 08:14:14
标签:爬虫,python,爬取,知乎,图片
首先,需要获取任意知乎的问题,只需要你输入问题的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中,我们采用简单的正则表达式将他匹配出来。细节如下图展示
编写代码吧,下面的代码注释请仔细阅读,中间有一个小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
运行结果为
来源:https://blog.51cto.com/14510224/2438070


猜你喜欢
- 本文实例讲述了python中sleep函数用法。分享给大家供大家参考。具体如下:Python中的sleep用来暂停线程执行,单位为秒#---
- 上次看到别人说写一个类似支付宝支付密码的输入框效果,今天就想自己写了试试看,大体功能是实现了。已实现部分: 1. 焦点会随着输入数值往后推移
- osc的rss不是全文输出的,不开心,所以就有了python抓取osc最新博客生成Rss# -*- coding: utf-8 -*-fro
- 本文实例讲述了Python使用Dijkstra算法实现求解图中最短路径距离问题。分享给大家供大家参考,具体如下:这里继续前面一篇《Pytho
- 样例:1.创建vue项目,不再详述2.引入vant之前用过很多插件做这个功能,但是效果都不尽人意,出现各种问题,直到遇到vant这个插件,完
- 一、前言分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)
- 本文主要介绍了pandas导出数据到文件的四种方式,分享给大家,主要也是给自己留个笔记,具体如下:import pandas as pdim
- 本文实例讲述了pymongo实现控制mongodb中数字字段做加法的方法。分享给大家供大家参考。具体分析如下:这个非常实用,比如我们需要给文
- 效果图如下所示: 前言嗨,说起探探想必各位程序汪都不陌生(毕竟妹子很多),能在上面丝滑的翻牌子,探探的的堆叠滑动组件起到了关键的作
- rpc有多种调用方式,http、json-rpc、tcp一、服务端在代码中,启动了三个服务package mainimport ("
- 自定义分页样式,不多废话,直接上代码~ html部分<div id="my_id"> &nbs
- 使用本文给出的方法就可以制作出一个简单的rss阅读器了。用xmldom方法打开xml文件,如果是本地的没有问题,就是用Server.MapP
- 一. 开发前的准备1. 必须了解的知识 SDK:软件开发工具包,可以为开发者提供快速开发的工具沙箱环境:也就是测试环境支付宝支付金额的精度:
- 从字面意思看了一下是因为slave_pending_jobs_size_max默认值为16777216(16MB),但是slave接收到的s
- 创建类Python 类使用 class 关键字来创建。简单的类的声明可以是关键字后紧跟类名:class ClassName(bases):&
- 一、第三方模块的下载与使用1、什么是第三方模块第三方模块是指别人编写的模块第三方模块一般功能都比较强大2、如何安装第三方模块方式一:pip工
- 增加字段alter table docdsp add dspcode char(200)删除字段ALTER TABLE tabl
- 系统抛出18483错误,未能连接服务器,因为'distributor_admin'未定义远程登陆 我在做分发服务器,进行快照
- 就我个人经验来讲:除了oracle,没有比HP 客户支持中心更糟糕的体验了。刚买不到一个月的HP MINI笔记本,莫名其妙键盘上的引号键松动
- “表情包”是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其