总体说明:微信公众号的文章也是个普通的网页。
下面的代码以微信公众号“Python小屋”的文章1900页Python系列PPT分享三:选择与循环结构语法及案例(96页) 为例,爬取其中的图片并保存为本地图片文件,主要演示urllib标准库和正则表达式用法。
按照惯例,首先分析网页结构,该文url地址为https://mp.weixin.qq.com/s?__biz=MzI4MzM2MDgyMQ==&tempkey=OTMwX1pNbk5ETmVxTkkwdXpGaWo1RC1GZThwaHlzeHRRb2dfcjRFZmpFc2cyVDhBME82dl82dHVWdks5UDc2SFZtWTN3M2VQQ1BFalRpblpfZUFrdHpEbzBpUDR5OXZRS3N0VzE2WXp4Ym5iNWZmLXVMeDFBeThfZFpKa3VxNHpIT21hNnBTc244THRCQm1leTVSendVRk5zSnNIWldFaHUxRzRJaFU3OGd%2Bfg%3D%3D&chksm=6b8aad835cfd249522b213148affa25de442377adfb83afec75e3321fc6059ff26d2ddd11e04#rd,使用浏览器打开,然后查看源码,找到关键位置,如图所示:
接下来分析网页结构,并设计提取规则为
pattern = 'data-type="png" src="(.+?)"'
最后编写爬虫代码如下:
from re import findall
from urllib.request import urlopen
url = 'https://mp.weixin.qq.com/s?__biz=MzI4MzM2MDgyMQ==&tempkey=OTMwX1pNbk5ETmVxTkkwdXpGaWo1RC1GZThwaHlzeHRRb2dfcjRFZmpFc2cyVDhBME82dl82dHVWdks5UDc2SFZtWTN3M2VQQ1BFalRpblpfZUFrdHpEbzBpUDR5OXZRS3N0VzE2WXp4Ym5iNWZmLXVMeDFBeThfZFpKa3VxNHpIT21hNnBTc244THRCQm1leTVSendVRk5zSnNIWldFaHUxRzRJaFU3OGd%2Bfg%3D%3D&chksm=6b8aad835cfd249522b213148affa25de442377adfb83afec75e3321fc6059ff26d2ddd11e04#rd'
with urlopen(url) as fp:
content = fp.read().decode()
pattern = 'data-type="png" src="(.+?)"'
result = findall(pattern, content)
for index, item in enumerate(result):
with urlopen(str(item)) as fp:
with open(str(index)+'.png', 'wb') as fp1:
fp1.write(fp.read())
最后,运行上面的代码,稍等吃5颗瓜子的时间(注意,是用手扒开瓜子,不考虑用牙秒嗑十颗瓜子的老司机),当前文件夹中得到如下图片: