猫哥教你写爬虫 036--爬虫-BeautifulSoup实践-作业-电影top250-作业解析

遍历list的索引和值

list1 = ['我','爱','中国']
for i,k in enumerate(list1):
    print(i)
    print(k)
复制代码

面向对象风格的代码, 已写注释

import requests
import time
from bs4 import BeautifulSoup
class Spider():
    def __init__(self, base_url):
        '''
        根据入口url来实例化movie对象
        '''
        self.movie = Movie(base_url)
    def start(self):
        '''
        1. 获取每个分页的url
        2. 遍历, 把每个分页url作为入口
        3. 进入页面, 爬取数据
        4. 保存到movies_250_list
        5. 处理movies_250_list, 生成markdown
        '''
        for movie_url in self.get_page_urls():
            self.make_movie_list(movie_url)
        self.movie.make_markdown()
    def make_movie_list(self, url):
        '''
        从页面获取电影的相关信息, 保存到movie_250_list
        '''
        res = requests.get(url)
        print(url)  # 打印url, 显示进度
        time.sleep(2)  # 暂停2秒, 防止频率过高, 被封IP
        movie_html_tag_obj = BeautifulSoup(res.text, 'html.parser')
        for i in movie_html_tag_obj.find('ol', class_='grid_view').find_all('div', class_='item'):
            tmp_dict = {}  # 设置对象, 用来保存电影的名称, 封面, 评论, 和评分(电影的排名可以参考list的索引)
            tmp_dict['movie_title'] = i.find(
                'div', class_='pic').find('img')['alt']
            tmp_dict['movie_img'] = i.find(
                'div', class_='pic').find('img')['src']
            tmp_dict['movie_desc'] = i.find('span', class_='inq').text
            tmp_dict['movie_score'] = i.find('span', class_='rating_num').text
            self.movie.movies_250_list.append(tmp_dict)
    def get_page_urls(self):
        '''
        获取分页的url
        因为豆瓣250电影太多, 所以进行了分页, 我们需要进入每个分页里面, 进行爬取
        '''
        movie_url_list = [self.movie.base_url]  # 声明变量的时候, 先把第一个网址写进去
        res = requests.get(self.movie.base_url)
        movie_index_tag_obj = BeautifulSoup(res.text, 'html.parser')
        a_tag_list = movie_index_tag_obj.find('div', class_='paginator').find_all('a')  # 从a标签的href获取url
        for i in a_tag_list[:9]:
            movie_url_list.append(self.movie.base_url+i['href'])
        return movie_url_list
class Movie():
    base_url = ''  # 入口url
    movies_250_list = []  # 电影250列表
    def __init__(self, base_url):
        '''
        初始化对象时, 存储url, 方便以后调用
        '''
        self.base_url = base_url
    def make_markdown(self):
        '''
        创建markdown, 把之前存储的信息, 写入markdown
        '''
        with open('douban250.md', 'w', encoding='utf8') as file:
            for index, movie_dict in enumerate(self.movies_250_list):
                file.write('![]({})\n'.format(movie_dict['movie_img']))
                file.write('## {}\n'.format(movie_dict['movie_title']))
                file.write(
                    '### {} [top{}-{}]\n'.format(movie_dict['movie_desc'], index+1, movie_dict['movie_score']))
                file.write('---\n\n')
if __name__ == "__main__":
    spider = Spider('https://movie.douban.com/top250')  # 初始化爬虫, 传入入口url
    spider.start()  # 开始爬取
复制代码

快速跳转:

猫哥教你写爬虫 000--开篇.md
猫哥教你写爬虫 001--print()函数和变量.md
猫哥教你写爬虫 002--作业-打印皮卡丘.md
猫哥教你写爬虫 003--数据类型转换.md
猫哥教你写爬虫 004--数据类型转换-小练习.md
猫哥教你写爬虫 005--数据类型转换-小作业.md
猫哥教你写爬虫 006--条件判断和条件嵌套.md
猫哥教你写爬虫 007--条件判断和条件嵌套-小作业.md
猫哥教你写爬虫 008--input()函数.md
猫哥教你写爬虫 009--input()函数-人工智能小爱同学.md
猫哥教你写爬虫 010--列表,字典,循环.md
猫哥教你写爬虫 011--列表,字典,循环-小作业.md
猫哥教你写爬虫 012--布尔值和四种语句.md
猫哥教你写爬虫 013--布尔值和四种语句-小作业.md
猫哥教你写爬虫 014--pk小游戏.md
猫哥教你写爬虫 015--pk小游戏(全新改版).md
猫哥教你写爬虫 016--函数.md
猫哥教你写爬虫 017--函数-小作业.md
猫哥教你写爬虫 018--debug.md
猫哥教你写爬虫 019--debug-作业.md
猫哥教你写爬虫 020--类与对象(上).md
猫哥教你写爬虫 021--类与对象(上)-作业.md
猫哥教你写爬虫 022--类与对象(下).md
猫哥教你写爬虫 023--类与对象(下)-作业.md
猫哥教你写爬虫 024--编码&&解码.md
猫哥教你写爬虫 025--编码&&解码-小作业.md
猫哥教你写爬虫 026--模块.md
猫哥教你写爬虫 027--模块介绍.md
猫哥教你写爬虫 028--模块介绍-小作业-广告牌.md
猫哥教你写爬虫 029--爬虫初探-requests.md
猫哥教你写爬虫 030--爬虫初探-requests-作业.md
猫哥教你写爬虫 031--爬虫基础-html.md
猫哥教你写爬虫 032--爬虫初体验-BeautifulSoup.md
猫哥教你写爬虫 033--爬虫初体验-BeautifulSoup-作业.md
猫哥教你写爬虫 034--爬虫-BeautifulSoup实践.md
猫哥教你写爬虫 035--爬虫-BeautifulSoup实践-作业-电影top250.md
猫哥教你写爬虫 036--爬虫-BeautifulSoup实践-作业-电影top250-作业解析.md
猫哥教你写爬虫 037--爬虫-宝宝要听歌.md
猫哥教你写爬虫 038--带参数请求.md
猫哥教你写爬虫 039--存储数据.md
猫哥教你写爬虫 040--存储数据-作业.md
猫哥教你写爬虫 041--模拟登录-cookie.md
猫哥教你写爬虫 042--session的用法.md
猫哥教你写爬虫 043--模拟浏览器.md
猫哥教你写爬虫 044--模拟浏览器-作业.md
猫哥教你写爬虫 045--协程.md
猫哥教你写爬虫 046--协程-实践-吃什么不会胖.md
猫哥教你写爬虫 047--scrapy框架.md
猫哥教你写爬虫 048--爬虫和反爬虫.md
猫哥教你写爬虫 049--完结撒花.md

转载于:https://juejin.im/post/5cfc4adce51d45508c2fb81b

猜你喜欢

转载自blog.csdn.net/weixin_34253126/article/details/91416928