豆瓣电影Top250

一、显示影片基本信息

访问豆瓣电影Top250,获取每部电影的中文片名、排名、评分及其对应的链接,按照“排名-中文片名-评分-链接”的格式显示在屏幕上。

1. 打开豆瓣电影Top250网页

2. 在网页上右击我们所要获取的信息;

例如:要获取《肖申克的救赎》电影的导演,将鼠标移至该电影的导演处,右击鼠标出现。
在这里插入图片描述

3. 点击检查,即可定位该信息在html网页源码的具体位置;

在这里插入图片描述

4. 右击对应标签,选择Copy -> Copy selector,即可获得对应元素的CSS选择器。

在这里插入图片描述

5. 将复制得到的CSS选择器粘贴在soup.select()中即可。

参考步骤及代码:
(1) 在PyCharm中新建项目,命名为webCrawler;
(2) 在webCrawler项目里新建doubanCrawler文件夹;
(3) 在doubanCrawler文件夹中创建getTop250.py文件;
(4) 获取豆瓣Top250基本信息代码如下:
import requests
from bs4 import BeautifulSoup
import time
# 请求网页
def page_request(url, ua):
    response = requests.get(url=url, headers=ua)
    html = response.content.decode('utf-8')
    return html
# 解析网页
def page_parse(html):
    soup = BeautifulSoup(html, 'lxml')
    # 获取每部电影的排名
    position = soup.select('#content > div > div.article > ol > li > div > div.pic > em')
    # 获取豆瓣电影名称
    name = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-child(1)')
    # 获取电影评分
    rating = soup.select('#content > div > div.article > ol > li> div > div.info > div.bd > div > span.rating_num')
    # 获取电影链接
    href = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a')
    for i in range(len(name)):
        print(position[i].get_text()+'\t'+name[i].get_text()+'\t' + rating[i].get_text() + '\t' + href[i].get('href'))

if __name__ == "__main__":
    print('**************开始爬取豆瓣电影**************')
    ua = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4421.5 Safari/537.36'}
    # 豆瓣电影Top250每页有25部电影,start就是每页电影的开头
    for startNum in range(0, 251, 25):
        url = "https://movie.douban.com/top250?start=%d" % startNum
        html = page_request(url=url, ua=ua)
        page_parse(html=html)
        print('**************爬取完成**************')
        

二、存储影片详细信息

访问豆瓣电影Top250,在先前的基础上,获取每部电影的导演、编剧、主演、类型、上映时间、片长、评分人数以及剧情简介等信息,并将获取到的信息保存至本地文件中。

1. 创建downloadTop250.py;

在先前创建的项目webCrawler下的doubanCrawler文件夹中创建downloadTop250.py

2. 参考代码

import requests
from bs4 import BeautifulSoup
import re
import docx
from docx.oxml.ns import qn

# 请求网页
def page_request(url, ua):
    response = requests.get(url=url, headers=ua)
    html = response.content.decode('utf-8')
    return html

# 解析网页
def page_parse(html, ua):
    soup = BeautifulSoup(html, 'lxml')
    for tag in soup.find_all(attrs={'class': 'item'}):
        data = []
        # 序号
        num = tag.find('em').get_text()
        data.append(num)
        # 电影名称
        name = tag.find_all(attrs={'class': 'title'})[0].get_text()
        data.append(name)
        # 豆瓣链接
        href = tag.find(attrs={'class': 'hd'}).a
        url = href.attrs['href']
        data.append('豆瓣链接:' + url)
        # 评分与评论数
        info = tag.find(attrs={'class': 'star'}).get_text()
        info = info.replace('\n', '').lstrip()
        # 使用正则表达式获取数字
        mode = re.compile(r'\d+\.?\d')
        i = 0
        for n in mode.findall(info):
            if i == 0:
                # 评分
                data.append('豆瓣评分:' + n)
            elif i == 1:
                # 评分人数
                data.append('评分人数:' + n)
            i = i + 1
        # 进入子网页,获取每部电影的具体信息
        sub_page_requests(url, ua, data)
        print('第%s部电影信息爬取完成' % num)

# 子网页处理函数:进入并解析子网页/请求子网页
# 获取影片详细信息
def sub_page_requests(url, ua, data):
    html = page_request(url=url, ua=ua)
    soup = BeautifulSoup(html, 'lxml')
    # 影片信息
    info = soup.find(attrs={'id': 'info'}).get_text()
    data.append(info)
    # 影片简介
    summary = soup.find(attrs={'property': 'v:summary'}).get_text()
    summary = summary.replace('\n', '').replace(' ', '').lstrip()
    data.append(data[1] + '影片简介:\n' + summary)
    # 保存影片信息
    save(data)

def save(data):
    file = docx.Document()
    # 设置字体格式
    file.styles['Normal'].font.name = u'Times New Roman'
    file.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'), u'Times New Roman')

    # 将爬取到的数据写入word中
    for element in data:
        file.add_paragraph(element)
    file.save('result/' + data[0] + '、' + data[1] + '.docx')

if __name__ == "__main__":
    print('**************开始爬取豆瓣电影**************')
    ua = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4421.5 Safari/537.36'}
    # 豆瓣电影Top250每页有25部电影,start就是每页电影的开头
    data_List = []
    for startNum in range(0, 251, 25):
        url = "https://movie.douban.com/top250?start=%d" % startNum
        html = page_request(url=url, ua=ua)
        # 获取每部影片的信息
        page_parse(html=html, ua=ua)
        print('**************爬取完成**************')
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值