Python爬虫系列——爬取豆瓣音乐排行榜!

今天一个学妹来找我帮忙,她选修了爬虫课,老师给了爬豆瓣视频排行榜信息的代码,要求她们改写,然后学妹想改成爬音乐排行榜信息,结果出错了,然后代码出错了又自己改不了,所以就来找我小土豆啦~

后面附带她们老师给的爬取豆瓣电影排行榜信息的代码。

下面是我改过之后的完整代码,可正常运行的,如果不能正常爬取内容请注意该博客的发布时间,有可能豆瓣的代码换了!

from urllib import request
from chardet import detect
from bs4 import BeautifulSoup as bs
import re

def getSoup(url):
    with request.urlopen(url) as fp:
        byt=fp.read()
        det=detect(byt)
        return bs(byt.decode(det['encoding']),'lxml')

def getData(soup):
    data=[]
    div=soup.find('div',attrs={'class':'grid-16-8 clearfix'})
    data = []
    for width in div.findAll('table', {'width': '100%%'}):
        small_data = []
        
        small_data.append(width.find('a', {'class': 'nbg'})['title'])
        
        small_data.append(width.find('span', {'class': 'rating_nums'}).string)
        
        star_index = re.search('class="allstar', str(width)).span()[1]
        small_data.append(int(str(width)[star_index: star_index + 2]) / 10)
        
        data.append(small_data)
    return data

def nextUrl(soup):
    a=soup.find('a',text=re.compile("^后页"))
    if a:
        return a.attrs['href']
    else:
        return None

if __name__=='__main__':
    url="https://music.douban.com/top250"
    soup=getSoup(url)
    print(getData(soup))
    nt=nextUrl(soup)
    while nt:
        soup=getSoup(nt)
        print(getData(soup))
        nt=nextUrl(soup)

这部分是老师给的爬豆瓣电影排行榜信息的代码:

from urllib import request
from chardet import detect
from bs4 import BeautifulSoup as bs
import re

def getSoup(url):
    with request.urlopen(url) as fp:
        byt=fp.read()
        det=detect(byt)
        return bs(byt.decode(det['encoding']),'lxml')

def getData(soup):
    data=[]
    ol=soup.find('ol',attrs={'class':'grid_view'})
    for li in ol.findAll('li'):
        tep=[]
        titles=[]
        for span in li.findAll('span'):
            if span.has_attr('class'):
                if span.attrs['class'][0]=='title':
                    titles.append(span.string.strip())
                elif span.attrs['class'][0]=='rating_num':
                    tep.append(span.string.strip())
                elif span.attrs['class'][0]=='inq':
                    tep.append(span.string.strip())
        tep.insert(0,titles)
        data.append(tep)
    return data

def nextUrl(soup):
    a=soup.find('a',text=re.compile("^后页"))
    if a:
        return a.attrs['href']
    else:
        return None
    
if __name__=='__main__':
    url="https://movie.douban.com/top250"
    soup=getSoup(url)
    print(getData(soup))
    nt=nextUrl(soup)
    while nt:
        soup=getSoup(url+nt)
        print(getData(soup))
        nt=nextUrl(soup)

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是土豆大叔啊!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值