貓哥教你寫爬蟲 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--完結撒花.mdhtml

相關文章
相關標籤/搜索