Python零基础爬虫速成②:批量爬取微信公众号图片(基于beautifulsoup爬取吉他谱)
目录
- 支持库安装
- 网页分析
- 代码部分分析
- 文章列表爬取
- 图片列表爬取
- 图片保存
- 未来工作
- 下载
支持库安装
pip install request
pip install beautifulsoup4
pip install Pillow
Requests :唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
Beautiful Soup :是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。
Pillow 是一个对 PIL 友好的分支,而 PIL 是一个 Python 图像处理库。
网页分析
网页地址:
https://mp.weixin.qq.com/s/RQKeWQuOgtCnml-prMXC5w
爬取步骤:
- 爬取文章列表
- 文章页面发请求
- 爬取图片列表
- 保存图片
代码部分分析
文章列表爬取
find_all方法参数:
find_all( name , attrs , recursive , string , **kwargs )
参数名 | 描述 |
---|---|
name | 标签名,如“a”筛选<a>标签 |
attrs | 参数字典 |
recursive | 是否递归?默认真,遍历所有子节点 |
limit | 返回一定数目的节点 |
String | string 参数接受 字符串 , 正则表达式 , 列表, True |
**kwargs | 过滤器 |
**返回值:**节点集合ResultSet
详细信息:
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id27
def get_article_list(web_url):ans = {}html = requests.get(web_url).textsoup = BeautifulSoup(html, 'html.parser')result_set = soup.find_all('section', attrs={'style': 'padding-right: 0.6em;padding-bottom: 1em;padding-left: 0.6em;box-sizing: border-box;'})for result in result_set:category = result.find('span').text #不同类别sub_result_set = result.find_all('a')article_list=[]for sub_result in sub_result_set:article_url = sub_result['href']song_name = sub_result.textsong_name = song_name.split('》')[0].replace('《','')article_list.append({'name':song_name,'url':article_url})if len(article_list)!=0: ans[category] = article_listreturn ans
图片列表爬取
find_all(使用了匿名函数布尔表达式)
不是很容易判断图片位置(微信网页结构太乱)
def get_img_url(web_url):html = requests.get(web_url).textsoup = BeautifulSoup(html, 'html.parser')imgs = soup.find_all(lambda x:x.has_attr('data-src') and x.name=='img' and x['data-w']!='' and int(x['data-w'])>1000)imgs_url_list = [imgs[i]['data-src'] for i in range(len(imgs))]return imgs_url_list
图片保存
根据图片的url判断图片的尺寸
再决定是否保存
def write_img(file_path,img):with open(file_path, 'wb') as fd:fd.write(img)
def write_img_from_list(img_url_list,song_name):num=0for idx,img_url in enumerate(img_url_list,1):img = requests.get(img_url).contentim = Image.open(BytesIO(img))if im.width < im.height:num += 1file_path = os.path.join(key, song_name + '_' + str(num) + '.jpg', )write_img(file_path,img)print(song_name+':已爬取' + str(num) + '张图:')
未来工作
- 模拟添加cookie和header(暂时不需要 )
- 加快速度(并行多任务处理)
下载
开源地址:
https://github.com/ESwordCn/crawler_wechat_subscriptions
打包下载:
已按照不同首字母排序
上千张图片
下载地址:
https://download.csdn.net/download/Ejzq1/85065181
想免费下载?
下方点赞+关注+评论
Python零基础爬虫速成②:批量爬取微信公众号图片(基于beautifulsoup爬取吉他谱)相关推荐
- python爬取微信公众号_python使用webdriver爬取微信公众号
本文实例为大家分享了python使用webdriver爬取微信公众号的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- from selenium import we ...
- Python爬虫实例:爬取微信公众号图片(表情包)
背景: 在学习了简单爬虫的编写之后,我试图通过编写爬取公众号图片(表情包)来丰富我的聊天技能,亦不致于败给各种熊猫头. 在学习了requests库之后,就能够很轻松地爬取静态页面的信息,把网页对象获取 ...
- python爬虫爬取微信公众号小程序信息
python爬虫爬取微信公众号小程序信息 爬取内容 某汽车维修信息提供的维修店名称,地点以及电话(手机)号码 爬取步骤 啥也别管,先抓包看看,在这里,博主使用的抓包软件是charles 抓包:将网络传 ...
- 记一次批量定时抓取微信公众号文章的实现
记一次批量定时抓取微信公众号文章的实现 抓取前的说明和准备 数据的抓取 批量抓取 定时抓取 对爬虫防抓取机制的一些解决办法 最后 抓取前的说明和准备 本次抓取的选择的语言是java,本文章不会将整个工 ...
- 【Python爬虫】下载微信公众号图片
大家用爬虫下载图片时肯定遇到过https://demo?wx_fmt=jpeg链接的图片,常见的就是微信公众号的图片. 遇到链接图片用普通的方式是无法爬取下来的,我们可以用urllib.request ...
- Python零基础爬虫之回车桌面壁纸并实现自动换壁纸(内附完整源码)
前言 嗨喽,大家好,这里是魔王~ [课题]: Python零基础爬虫之回车桌面壁纸 [课题介绍]: 壁纸不应该只是一张图片,它应该是一门哲学 回车桌面网100000张无水印,高分辨率,电脑桌面壁纸, ...
- python爬虫如何实现每天爬取微信公众号的推送文章
python爬虫如何实现每天爬取微信公众号的推送文章 上上篇文章爬虫如何爬取微信公众号文章 上篇文章python爬虫如何爬取微信公众号文章(二) 上面的文章分别介绍了如何批量获取公众号的历史文章url ...
- python爬虫实战-爬取微信公众号所有历史文章 - (00) 概述
http://efonfighting.imwork.net 欢迎关注微信公众号"一番码客"获取免费下载服务与源码,并及时接收最新文章推送. 最近几年随着人工智能和大数据的兴起,p ...
- python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章
下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...
- python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
最新文章
- 【 C 】对指针表达式的个人总结与思考
- java专业编码_java编码中的坑(记一次解决编码BUG的经历) - 贪吃蛇学院-专业IT技术平台...
- div+css中设置了float属性后如何让外层的高度随着内层的高度大小自动调整
- NXP I.MX6ULL 交叉编译工具链下载地址?
- 学习使用 Manifest
- 【Java文件操作】txt文件的创建
- 专科计算机网络期末考试,计算机网络(专科)期末练习题.doc
- OpenCV的工具函数
- 数据结构之基于Java的顺序栈实现
- matlab元胞元素_MATLAB元胞数组(cell)知识
- 计算机wind10切换桌面wind7系统,win10多桌面切换的方法以及开启步骤是怎样的
- 利用Excel的LINEST计算线性拟合的斜率和截距的不确定性
- c语言 switch语句实例,C语言switch语句
- 如何在word中一次性删除硬回车或软回车
- 腾讯坐标系转化成百度坐标系
- 利用Python进行粗糙的视频字幕识别
- 数据库上机实验三(游标)
- 键入传真服务器位置是什么意思,2014传真服务器主要功能与技术参数说明.doc
- LeedCode 172. 阶乘后的零
- 《Elixir In Action》第一章--第五章笔记