网络爬虫——豆瓣电影排行榜数据抓取(高级)

网络爬虫——豆瓣电影排行榜数据抓取(高级)

目标网址:

豆瓣电影排行:https://movie.douban.com/top250?start=

目标数据描述:排名、电影名称、导演、主演、评价人数等信息,将尽可能多的数据抓取保存
在这里插入图片描述
任务明细:

(1)使用requests库实现该网站网页源代码的获取;

(2)使用BeautifulSoup对获取的源代码进行解析,并成功找到目标数据所在的特定标签,进行网页结构的解析;

(3)定义函数,将获取的目标数据打印输出,有能力的同学可以试着将结果写入文件中。

(4)使用框架式结构,通过参数传递实现整个特定数据的爬取。

可以选择定义全局列表,将目标数据获取后添加到列表中,同时,注意观察分页时url的变化,以便获取整个的排行榜数据。建议通过for循环传递变化参数实现。

源码

import requests
from bs4 import BeautifulSoup
import bs4 

def getHtmlText(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 Edg/80.0.361.69'        
    }
    try:
        result = requests.get(url,headers=headers,timeout=30)
        result.raise_for_status()
        result.encoding = result.apparent_encoding
        result=(result.text.replace('<br>','')).replace('<br/>','')
        return result
    except:
        return ""
            
def findUniverse(ulist , html):
    soup = BeautifulSoup(html,"html.parser")   
    list_ = [0,0,0,0,0,0,0]
    
    for li in soup.find(attrs=['class','grid_view']).children:
        if isinstance(li ,bs4.element.Tag):
            list_[0] = li.find('em').string
            list_[1] = li.find(attrs=['class','title']).string
            list_[2] = li.find(attrs=['class','bd']).find(attrs=['class','']).string.strip().split(" ")[1].replace(" ",'')
            list_[3] = li.find(attrs=['class','bd']).find(attrs=['class','']).string.strip().split(" ")[4].replace(" ",'')      
            list_[4] = li.find(attrs=['class','star']).span.find_next_sibling().string.strip()
            list_[5] = li.find(attrs=['class','star']).span.find_next_sibling().find_next_sibling().find_next_sibling().string.strip()
            if li.find(attrs=['class','quote']) is  not None:
                list_[6] = li.find(attrs=['class','quote']).span.string
            else:
                list_[6] = None
            
            ulist.append([list_[0],list_[1],list_[2],list_[3],list_[4],list_[5],list_[6]])
            
def printUniverse(ulist):
    tplt = '{0:^4}\t{1:^10}\t{2:10}\t{3:10}\t{4:10}\t{5:10}'
    print(tplt.format("排名","电影名称","导演","主演","评分","评价人数",chr(12288)))
    for i in range(len(ulist)):
        u = ulist[i]
        print(tplt.format(u[0],u[1],u[2],u[3],u[4],u[5],chr(12288)))
        
def main():
    ulist = [] 
    for i in range(10):
        url =  'https://movie.douban.com/top250?start=' + str( 25 * i ) 
        html = getHtmlText(url)
        findUniverse(ulist,html)
        
    printUniverse(ulist)
        
main()
    

输出如下:
在这里插入图片描述

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值