微网站制作速成法,网站名称和网址,免费做电子章网站,大连在哪个省文章目录 前言讲解爬取思路开爬爬取文章url文章爬取结果爬取图片图片爬取结果优化下载图片代码 声明结尾关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游… 文章目录 前言讲解爬取思路开爬爬取文章url文章爬取结果爬取图片图片爬取结果优化下载图片代码 声明结尾关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言
写一下如何爬取微信公众号里面的图片吧
先看看微信公众号的样子吧 我爬取的是公众号的合集内容
讲解
首先用手机打开某个图片公众号的文章然后复制链接用电脑打开它的url为
以下所展示的链接都是被我修改了的 https://mp.weixin.qq.com/mp/appmsgalbum?actiongetalbum__bizMzDg3MjY3galbum_id2646021169516584499count10begin_msgid2247483683begin_itemidx1is_reverse1uinkeypass_ticketwxtokendevicetypeclientversion__bizMzg2MDg3MjY3Mg%3D%3Dappmsg_tokenx50fjson 每个参数的作用
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接口如图 可以看到也是成功获取到了接口然后里面返回的列表就是网页中展示的文章列表了这就非常好办了。我们只需要请求这个接口就能获取到所有文章的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, paramsparams, headersheaders)
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, paramsparams, headersheaders)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, encodingutf-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 然后坐等爬取完成我这里是做了请求限制了的如果想爬快一点把限制删掉就行了。
文章爬取结果 也是爬取完成了但是爬完之后会报KeyError: article_list的错误这个无关紧要因为已经请求到最后数据之后的请求了导致获取不到这个article_list的json数据了。 然后看到上面的图片是254个内容但是爬取的链接只有244条数据缺失了几条但是程序也没出现问题所以就不管了也就几条数据不影响毕竟找出问题得花大量的时间。
爬取图片
上面只是爬取了文章的url现在要进入文章爬取图片了。
首先需要用到的库
import csv
import requests
from lxml import etree
import os
from urllib.parse import urlparse
import time
然后爬取图片的思路就是解析我们之前爬取的文章url通过遍历文章url去使用xpath去匹配文章里面的图片就行了第一次爬取出现了点小问题后面会讲。
关于Xpath获取
偷懒方式如下 匹配图片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, headersheaders)# 解析HTMLhtml etree.HTML(response.text)# 获取图片img_elements html.xpath(//*[idjs_content]/section/section[4]/p/img/data-src)if len(img_elements) 0:img_elements html.xpath(//*[idjs_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,encodingutf-8) as f:# 读取csv文件内容reader csv.reader(f)# 遍历每一行for row in reader:# 提取第一列的urlurl row[0]# 发送请求try:download_images(url)except Exception as e:print(fError: {e})continuetime.sleep(2)
图片爬取结果 可以看到有个别图片没有正常显示那是因为这个公众号最新的文章图片url和之前不一样我也是爬完才发现虽然才几张图片但是得优化一下
第一次爬取爬到了1333张图片 优化下载图片代码
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张图片。 声明
文章出现的代码只用于学习不会影响公众号正常运行如有侵权联系删除。
爬取下来的图片将不会保存望知~
结尾
公众号是没有反爬机制的所以爬取下来很容易不过公众号放的图片都不够高清但是也还是能看。如果也想学习学习如何爬取的可以关注公众号私信我找我要链接。如果有更好的图片网站也可以私信我~ 关于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%免费】