微信公众号图片爬取

微信公众号图片爬取

朋友问我能不能爬取“隔壁有狗”公众号的图片,他想要所有的历史文章的图片。我虽然没爬过公众号,不过在略微的分析一下后我觉得还是可以满足朋友的需求的。废话不多说,动手干活!
一、准备工作:
打开 “电脑版微信”,找到公众号
在这里插入图片描述
点击右上角,然后点击 “查看历史消息”选项,当然不止这一种方法,不过我们需要的效果就是出现以下的页面:
在这里插入图片描述
然后右键空白的地方,你就会发现有个“查看源代码”的选项,点击它以后会自动跳出一个txt形式的文本,里面放的就是这个页面下的源代码。你可以在当前页面随便复制一段历史文章的标题,然后在txt文件中查找,发现是可以找到的,而且还会发现这些文章的链接竟然也在源码中。
不过呢,这里其实有个陷阱,就是在这里查看到的源代码并不是全部历史文章的,它只有最开始你看到的那些历史文章。不假思索地,我把这个页面的滚轮拉到了最底,也就是这个公众号发布的第一篇文章的位置。
在这里插入图片描述
然后我们在最下方空白处右键“查看源代码”,你又会惊奇地发现这次打开的txt的内容明显比上一次要多很多,在txt查找框中输入第一个和最后一个文章标题并成功匹配后,自信满满地把源代码拷贝一份到本地,我们的准备工作就完成了。
PS:不要随便点击这个页面里的文章,否则又要重新拖动滚轮一次。

二、分析源代码:
以第一篇历史文章为例,点击“复制链接地址”和“用默认浏览器打开”获得的链接地址是一致的,可是呢在源代码中却又找不到。那只有一种可能,那就是能看到这篇文章的链接地址不止一个。
在这里插入图片描述
干脆还是按文章名寻找链接,既然名字都在源码里,链接不在里面就有点说不过去了吧。在源代码中查找文章名,结果如图,明显hrefs里就是我们需要的链接,打开看看后发现是可以的,看得出框架还是很清晰的嘛。
在这里插入图片描述
接下来就是网页的分析了,通过F12、右键审查元素,查看网页源代码,一整子的查找搜索后,发现图片的链接就在网页源代码中,这样我们就无需抓包操作,直接解析网页源代码即可。

三、爬虫编写:
我个人的习惯是建立两个py文件,其中一个取名为test.py,用来测试写到正式爬虫中的代码的正确性,写爬虫的过程总体是迂回探索的,模块化的编程让人有种搭积木的乐趣。直接上代码吧!

import requests				#请求网页
import os						#用于创建文件夹
from lxml import etree		#使用其中的xpath

def start():
#第一层,获取公众号全部文章的链接
    filename=’source.txt’#之前存在本地的公众号源代码
    with open(filename,'r',encoding='utf-8')as f:
        source=f.read()		#读取内容
    html_ele=etree.HTML(source)	#xpath常规操作
    hrefs=html_ele.xpath('//div[contains(@data-type,"APPMSG")]/h4/@hrefs')      #锁定元素位置
    num=0
    for i in hrefs:
        num+=1
        try:
            apply_one(i)
        except:
            continue
        print('第%d篇爬取完毕'%num)
#第二层,解析单篇文章
def apply_one(url):
    headers={			#可以用自己浏览器的User-Agent,也可以用fake-useragent库函数生成
        }
	#ps:fake-useragent举例
#pip install fake-useragent
	#from fake_useragent import UserAgent
	#ua = UserAgent()
	#print(ua.random)
    response=requests.get(url,headers=headers)
    elements=etree.HTML(response.text)
    data_src=elements.xpath('//section[contains(@style,"text-align")]/section/img/@data-src')
    #print(len(data_src))
    data_src=data_src[2:-1]
    #print(len(data_src))
    for src in data_src:
        try:
            download(src)		#下载图片
        except:
            continue
    
#第三层下载层
def download(src):
    headers={
        'User-Agent': #自行添加}
    response=requests.get(src,headers=headers)
    name=src.split('/')[-2]		#截取文件名
    #print(name)
    dtype=src.split('=')[-1]		#截取图片类型
	name+='.'+dtype					#重构图片名
	os.makedirs('doge',exist_ok=True)	#当前目录生成doge文件夹
    with open('doge/'+name,'wb')as f:
        f.write(response.content)
        
if __name__=='__main__':
    start()

四、总结:
很多类似的爬虫的编写都是一个从点到面的过程,首先突破一点,然后迭代等方法推广及面,由表及里,由浅入深。爬虫的学习是需要投入大量时间和精力的,想放弃的时候再咬咬牙,凭借那一丝执着和秉性,相信自己能突破难关;学习的过程也不是封闭的,可以和优秀的人多交流,不过还是提倡自己解决问题,实在没办法了再求救,因为你会发现只有自己才能真正救得了自己。希望大家从中有所收获,写得不好的地方还请大家多多包涵!

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Python可以用于爬取微信公众号的文章。有几种方式可以实现这一目标,其中一种方式是通过登录微信公众号平台,在面搜索要爬取公众号,然后进行抓包。另外一种方式是使用安卓模拟器进行抓包。还可以使用搜狗的微信模块来获取数据。 在使用第一种方式时,首先需要拥有一个微信公众号的账号。然后,通过工具如pycharm和fiddler等,登录微信公众号平台,进入创作管理,选择文素材,然后创建或编辑文章。最后,通过添加引用和查找公众号文章等步骤,进行数据爬取和收集。 在实现这些步骤之前,你需要了解微信公众号平台的主要功能和界面布局。主面板可以划分为七大块,每个块都有不同的功能。在后续的操作中,你可以使用Python代码来模拟微信请求,并实现数据爬取和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [欢度国庆⭐️共享爬虫之美⭐️基于 Python 实现微信公众号爬虫Python无所不能)](https://blog.csdn.net/xiejiachao/article/details/120573509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【爬虫python爬取微信公众号](https://blog.csdn.net/qq_36269293/article/details/109244944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值