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)