使用Python爬取公众号的合集

文章目录

  • 前言
  • 讲解
  • 爬取思路
  • 开爬
    • 爬取文章url
    • 文章爬取结果
    • 爬取图片
    • 图片爬取结果
    • 优化下载图片代码
  • 声明
  • 结尾
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


前言

写一下如何爬取微信公众号里面的图片吧!

先看看微信公众号的样子吧:

image

我爬取的是公众号的合集内容

讲解

首先用手机打开某个图片公众号的文章,然后复制链接用电脑打开,它的url为:

以下所展示的链接都是被我修改了的

https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=MzDg3MjY3g==&album_id=2646021169516584499&count=10&begin_msgid=2247483683&begin_itemidx=1&is_reverse=1&uin=&key=&pass_ticket=&wxtoken=&devicetype=&clientversion=&__biz=Mzg2MDg3MjY3Mg%3D%3D&appmsg_token=&x5=0&f=json

每个参数的作用

  • action: 操作类型,值为getalbum
  • __biz: 公众号的唯一标识,值为MzDg3MjY3g==
  • album_id: 相册的唯一标识,值为2646021169516584499
  • count: 需要获取的相册数量,值为10
  • begin_msgid: 开始的消息ID,值为2247483683
  • begin_itemidx: 开始的项目索引,值为1
  • is_reverse: 是否倒序,值为1
  • uin: 用户uin,值为空。
  • key: 密钥,值为空。
  • pass_ticket: 通行证,值为空。
  • wxtoken: 微信令牌,值为空。
  • devicetype: 设备类型,值为空。
  • clientversion: 客户端版本,值为空。
  • appmsg_token: 文章令牌,值为空。
  • x5: x5参数,值为0
  • f: 返回的数据格式,值为json

爬取思路

可以看到文章开头的图片,公告号的每篇文章都是能跳转的,我们爬取图片肯定也是爬取跳转之后页面的图片,那么第一件事就是先获取所有文章的url。然后我的思路是将url爬取后保存到csv文件中,然后再从csv中读取url进一步解析图片的位置,然后下载图片。这就是整体思路。

首先文章列表能够显示再网页上,那它必定是请求后端了的,那么请求后端我们就能拿到API接口,如图:

image

可以看到也是成功获取到了接口,然后里面返回的列表就是网页中展示的文章列表了,这就非常好办了。我们只需要请求这个接口就能获取到所有文章的url了,然后微信公众号合集内容的规则就是,获取最后一条数据的消息ID是下一条数据开始的消息ID,所以当我们爬取到一个列表,假如这个列表有10条数据,那么第10条数据的msgid就是下一次请求的begin_msgid,这样就能获取11-20的数据,依次内推就能获取所有文章了,之前试过想一次性获取全部文章,好像不太行,所以用一个循环然后去修改begin_msgid参数发送请求就行了。

开爬

爬取文章url

需要用到的库

import requests
import json
import csv
import time

参数上面已经讲过了就不讲了。

请求头的Referer和Cookie,用浏览器的开发工具(F12)找到文章请求,然后就能获取到。

# 设置请求参数
url = 'https://mp.weixin.qq.com/mp/appmsgalbum'# 设置请求参数
params = {'action': 'getalbum','__biz': 'MzDg3MjY3g==','album_id': '2646021169516584499','count': 10,'is_reverse': 1, # 为倒叙也就是从第一篇文章开始'uin': '','key': '','pass_ticket': '','wxtoken': '','devicetype': '','clientversion': '','__biz': 'MzDg3MjY3g==','appmsg_token': '','x5': 0,'f': 'json'
}# 设置请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Referer': '','Host': 'mp.weixin.qq.com','Accept-Encoding': 'gzip, deflate','Cookie': ''
}

分段展示代码

# 设置请求频率限制
MAX_REQUESTS_PER_MINUTE = 10
REQUEST_INTERVAL = 60 / MAX_REQUESTS_PER_MINUTE# 发送请求,获取第一页相册内容
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:data = json.loads(response.text)album = data['getalbum_resp']['article_list']last_msgid = album[-1]['msgid']  # 获取最后一张图片的消息ID 用作下次请求的begin_msgid
else:print('获取相册内容失败:', response.status_code)
# 循环发送请求,获取所有相册内容
result = []
while True:params['begin_msgid'] = last_msgidparams['begin_itemidx'] = 1print(url)response = requests.get(url, params=params, headers=headers)if response.status_code == 200:data = json.loads(response.text)album = data['getalbum_resp']['article_list']if len(album) == 0:break  # 如果相册为空,则退出循环for photo in album:# 获取url和titleurl2 = photo['url']title = photo['title']result.append({'url': url2, 'title': title})# 保存到csv文件中with open('blogimg3.csv', 'a', newline='', encoding='utf-8') as f:writer = csv.DictWriter(f, fieldnames=['url', 'title'])writer.writerow({'url': url2, 'title': title})# 控制请求频率time.sleep(REQUEST_INTERVAL)last_msgid = album[-1]['msgid']  # 获取最后一张图片的消息ID,用于下一次请求else:print('获取相册内容失败:', response.status_code)break

ok 然后坐等爬取完成,我这里是做了请求限制了的,如果想爬快一点把限制删掉就行了。

文章爬取结果

image

image

也是爬取完成了,但是爬完之后会报KeyError: 'article_list'的错误,这个无关紧要,因为已经请求到最后数据之后的请求了,导致获取不到这个article_list的json数据了。

image

然后看到上面的图片是254个内容,但是爬取的链接只有244条,数据缺失了几条,但是程序也没出现问题,所以就不管了,也就几条数据,不影响,毕竟找出问题得花大量的时间。

爬取图片

上面只是爬取了文章的url,现在要进入文章爬取图片了。

首先,需要用到的库

import csv
import requests
from lxml import etree
import os
from urllib.parse import urlparse
import time

然后爬取图片的思路就是解析我们之前爬取的文章url,通过遍历文章url,去使用xpath去匹配文章里面的图片就行了,第一次爬取出现了点小问题,后面会讲。

关于Xpath获取

偷懒方式如下:

image

匹配图片url函数 download_images

def download_images(url):# 设置请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Referer': '','Host': 'mp.weixin.qq.com','Accept-Encoding': 'gzip, deflate','Cookie': ''}# 发送请求response = requests.get(url, headers=headers)# 解析HTMLhtml = etree.HTML(response.text)# 获取图片img_elements = html.xpath('//*[@id="js_content"]/section/section[4]/p/img/@data-src')if len(img_elements) == 0:img_elements = html.xpath('//*[@id="js_content"]/section/section[4]/p/span/img/@data-src')print(img_elements)# 下载图片for url in img_elements:print(f"下载图片:{url}")download_image(url, 'blogimg4_1')

**下载图片函数 **download_image

# 下载
def download_image(url, img_dir):# 解析urlparsed_url = urlparse(url).pathwx_fmt = parsed_url.split('/')[1].split('_')[1]# 获取文件名filename = url.split('/')[-2] + '.' + wx_fmt# 发送请求response = requests.get(url)# 保存图片with open(os.path.join(img_dir, filename), 'wb') as f:f.write(response.content)

main方法

if __name__ == '__main__':with open('blogimg3_1.csv',newline='',encoding='utf-8') as f:# 读取csv文件内容reader = csv.reader(f)# 遍历每一行for row in reader:# 提取第一列的urlurl = row[0]# 发送请求try:download_images(url)except Exception as e:print(f'Error: {e}')continuetime.sleep(2)

图片爬取结果

image

可以看到有个别图片没有正常显示,那是因为这个公众号最新的文章图片url和之前不一样,我也是爬完才发现,虽然才几张图片,但是得优化一下

第一次爬取,爬到了1333张图片

image

优化下载图片代码

download_image函数:

# 解析url
parsed_url = urlparse(url)
path_parts = parsed_url.path.split('/')# 判断链接特征并提取参数值
if 'wx_fmt' in parsed_url.query:wx_fmt = parsed_url.query.split('=')[1]# 获取文件名filename = path_parts[-2] + '.' + wx_fmt
elif 'mmbiz_jpg' in path_parts:filename = os.path.splitext(path_parts[2])[0] + '.jpg'
elif 'mmbiz_png' in path_parts:filename = os.path.splitext(path_parts[2])[0] + '.png'# 发送请求
response = requests.get(url)
# 保存图片
with open(os.path.join(img_dir, filename), 'wb') as f:f.write(response.content)

优化之后也是没有出现图片无法显示的情况,然后爬取了1368张图片。

image

声明

文章出现的代码只用于学习,不会影响公众号正常运行,如有侵权,联系删除。

爬取下来的图片将不会保存,望知~

结尾

公众号是没有反爬机制的,所以爬取下来很容易,不过公众号放的图片都不够高清,但是也还是能看。如果也想学习学习如何爬取的,可以关注公众号私信我,找我要链接。如果有更好的图片网站,也可以私信我~


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,希望提供给想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

激活Windows过程及报错解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上, 运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本

激活Windows过程及报错问题解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上,运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本。 前言 最近在激活Windows过程中,遇到了报错: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上…

【数据分析与可视化】利用Python对学生成绩进行可视化分析实战(附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面对学生成句和表现等数据可视化分析 1:导入模块 import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][simhei] plt.rcParams[f…

【Android】使用 Glide 给 ImageView 加载图像的简单案例

前言 Android Glide是一个用于在Android应用中加载和显示图片的流行开源库。它提供了简单易用的API,可以帮助开发者高效地加载远程图片、本地图片以及GIF动画,并提供了缓存、内存管理等功能,使得图片加载在移动应用中更加流畅和高效。Glide还…

小白菜QQ云端机器人源码-去除解密授权

小白菜QQ云端机器人源码分享:解密授权学习版已去除 这款源码是专为群机器人爱好者设计的,它基于挂机宝机器人框架构建的网页站点。 用户可以通过网页登录QQ账号至挂机宝框架中,无需通过机器人实现登录。 而且,该源码解决了一个…

运筹学经典问题(三):最大流问题

问题描述 给定一个图网络 G ( V , E ) G(V, E) G(V,E),网络中连边的权重代表最大容量,在这个图中找出从起点到终点流量最大的路径。 数学建模 集合: I I I:点的集合; E E E:边的集合。 常量&#x…

使用代理IP时的并发请求是什么意思?

很多做过数据采集的技术们应该都有所了解,在选择代理IP时会有一个并发请求的参数,这个参数是什么意思呢?可能有很多新手不是很了解,其实代理IP的并发请求就是指同时发送多个请求到目标服务器,以提高请求的效率和速度。…

docker-consul(容器的自动发现与注册)

1、微服务(容器)、容器的注册和发现:是一种分布式管理系统,用于定位服务的方法 (1)在传统的架构中,应用程序之间直连到已知的服务,设备提供的网络(ip地址、基于tcp/ip的…

android 13.0 去掉recovery模式UI操作页面的菜单选项

1.概述 在13.0进行系统rom定制化开发中,在进行一些定制化开发中,会根据需要在进入recovery模式的时候,去掉recovery模式的一些菜单选项, Reboot to bootloader,Enter rescue等菜单项,经过分析得知, 就是在device.cpp去掉一些菜单选项就可以了,接下来就来分析实现相关功…

《PySpark大数据分析实战》-04.了解Spark

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

python进行描述性统计分析,python怎么做描述性统计

大家好,小编来为大家解答以下问题,python语言的描述错误的选项,python描述算法的方法有几种,今天让我们一起来看看吧! 一、描述符是什么 描述符:是一个类,只要内部定义了方法__get__, __set__, …

strtok()的用法及实现哦

1. 用法 1. 声明:char *strtok(char *str, const char *delim) str -- 要被分解成一组小字符串的字符串。第一次调用 strtok() 时,这个参数应该是你想要分割的字符串。随后的调用应该将此参数设置为NULL,以便继续从上次的位置分割。delim -- …

接口自动化测试框架搭建

一、原理及特点 参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。测试报告这里用到第三方的包ReportNG 项目组织用Maven 二、准备 使用工具&#xff1…

SecureCRT设置log保存路径和格式

SecureCRT设置log保存路径和格式 D:\CRT.log%S%Y%M%D-%h%m%s.log [%Y%M%D_%h:%m:%s] [%h:%m:%s]

AJAX练习题:加强你的异步通信技能!

学习目标: 创建一个AJAX请求,从服务器获取一个JSON对象,并将其显示在网页上。 创建一个AJAX请求,向服务器发送数据并获取响应。使用获取到的响应数据更新网页上的内容。 创建一个AJAX请求,从服务器获取一个XML文件&a…

HBase 详细图文介绍

目录 一、HBase 定义 二、HBase 数据模型 2.1 HBase 逻辑结构 2.2 HBase 物理存储结构 ​2.3 数据模型 2.3.1 Name Space 2.3.2 Table 2.3.3 Row 2.3.4 Column 2.3.5 Time Stamp 2.3.6 Cell 三、HBase 基本架构 架构角色 3.1 Master 3.2 Region Server 3.3 Zo…

【DC-DC】世微 AP9166 降压恒压芯片 18V 2A同步降压转换器

600KHz,18V,2A同步降压转换器 概述 AP9166是一款完全集成的效率2A同步整流降压转换器。AP9166运行在宽输出电流上以高效率 负载范围。此设备提供两个操作模式、PWM控制和PFM模式切换控制,允许更宽范围的高效率 负载AP9166至少需要现成标准的…

基于ssm的汽车服务商城系统设计与实现论文

摘 要 本课题是根据用户的需要以及网络的优势建立的一个基于Vue的汽车服务商城系统,来更好的为用户提供服务。 本基于Vue的汽车服务商城系统应用Java技术,MYSQL数据库存储数据,基于SSMVue框架开发。在网站的整个开发过程中,首先对…

坚持创新驱动,超卓航科入选为“新一批国家知识产权优势企业”!

近日,根据《国家知识产权局关于确定2023年新一批及通过复核的国家知识产权示范企业和优势企业的通知》精神,经湖北省知识产权局组织测评、推荐,国家知识产权局审核,超卓航科入选为“新一批国家知识产权优势企业”。 超卓航科以金属…

IDEA debug窗口左边工具栏隐藏与显示

今天在debug排查代码的时候一不小心点到哪里,结果变成这样 我们可以这样恢复,右键Debug 点击show Toolbar

java的内存图

明确:jre jdk jvm关系 (详细去看这篇文章) 三者的大致结构是这样的,简单来说就是JDK包含JRE,JRE又包含JVM的关系。如下图所示: 从图中可以看出JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime E…