使用python的requests库爬取微信公众号文章中的图片

1.首先导入我们需要的库:

import requests
from lxml import etree
import os

以某篇文章为例,复制该文章连接:

 2.使用requests库获取该网址的响应

test_url='https://mp.weixin.qq.com/s/WmhPOknnublTEYIxoCQcvw'
headers={
        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58'
}
resp=requests.get(url=test_url,headers=headers).text

test_url是微信公众号文章链接,headers是访问请求头,get是使用requests库的get请求,.text是获取str类型的返回结果,能自动进行解码

3.使用lxml库解析网络节点

html1=etree.HTML(resp)
title=html1.xpath("//*[@id='activity-name']/text()")
img_list=html1.xpath("//img/@data-src")

xpath的具体含义可以看上一篇文章

4.获取标题和图片

print(title[0].strip())#获取标题
#获取图片
pic_save_dir = os.path.join(os.getcwd(), 'pic/')
img_list=html1.xpath("//img/@data-src")
print(img_list)
for img in img_list:
    pic_name=img.split("/")[-2]
    fmt=img.split('_')[1].split('/')[0]
    img_resp=requests.get(img).content #读取为2进制
    with open(pic_save_dir+pic_name+"."+fmt,"wb+") as f:
            f.write(img_resp)

pic_save_dir是文件存储路径,img是每个图片的路径,pic_name是图片名字,fmt是图片格式,img_resp是通过图片路径获取了图片的2进制文件,通过with open的方式写入到文件中,split("/")[-2]是将图片路径按/进行分割,并取倒数第2部分。

5.爬取结果

标题爬取结果:

 图片爬取结果:

6.源码

import lxml.html
import requests
from lxml import etree
from lxml import html
import urllib.request
import os

##爬取标题
test_url='https://mp.weixin.qq.com/s/gWtehW6FDEl0heZR8nK8Og'
headers={
        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58'
}
resp=requests.get(url=test_url,headers=headers).text
html1=etree.HTML(resp)
title=html1.xpath("//*[@id='activity-name']/text()")
print(title[0].strip())


##爬取图片
pic_save_dir = os.path.join(os.getcwd(), 'pic/')
img_list=html1.xpath("//img/@data-src")
for img in img_list:
    pic_name=img.split("/")[-2]
    fmt=img.split('_')[1].split('/')[0]
    img_resp=requests.get(img).content #读取为2进制
    with open(pic_save_dir+pic_name+"."+fmt,"wb+") as f:
            f.write(img_resp)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值