社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python抓取网易云专辑图详细教程

Python学习交流 • 6 年前 • 568 次点击  

运行环境

网易云音乐的网页跟普通的网页相比主要有两点不同:

  • 网页是 js 动态加载的

  • 使用了iframe框架

点击一下专辑页面翻页按钮看看url ,你会发现

http://music.163.com/#/artist/album?id=101988&limit=120&offset=0

limit 参数是限制一个页面加载专辑的个数

offset 参数是前面过滤多少个专辑,现在是一页12个专辑,所以第二页是offset=12,第三页offset=24,以此类推。。。

爬虫部分代码


爬虫逻辑

根据上图的网页结构可以看出,所有的专辑信息都在ul 标签里面,每一个专辑在一个li 标签里。li 标签中包含了图片url、专辑名字、以及专辑时间。

加载 iframe 框架中的内容:

driver = webdriver.PhantomJS()
driver.get(self.init_url)
driver.switch_to.frame("g_iframe")
html = driver.page_source

然后找到所有的封面元素:

根据上图的网页结构可以看出,所有的专辑信息都在ul 标签里面,每一个专辑在一个li 标签里。li 标签中包含了图片url、专辑名字、以及专辑时间。

抓取其中的内容就好了。




    
all_li = BeautifulSoup(html, 'lxml').find(id='m-song-module').find_all('li')for li in all_li:
    album_img = li.find('img')['src']
    album_name = li.find('p', class_='dec')['title']
    album_date = li.find('span', class_='s-fc3').get_text()

这里获取到的图片url 依然是有图片宽高参数的,所以要过滤宽高参数:
http://p4.music.126.net/pLA1GX0KtU-vU4ZA6Cr-OQ==/1401877340532770.jpg?param=120y120

把问号后面的参数过滤掉:

end_pos = album_img.index('?')  #找到问号的位置album_img_url = album_img[:end_pos]  #截取问号之前的内容

图片命名逻辑:专辑时间 + 专辑名。
专辑名可能有一些特殊字符,需要替换掉!
photo_name = album_date + ' - ' + album_name.replace('/','').replace(':',',') + '.jpg'

完整代码



该代码有BUG,知道错在那里并且修改成功,留言评论即可获取神秘礼包

感谢 大家
转发 关注



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/HIhf4hXWL7
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3264
 
568 次点击