本文,使用requests库。

豆瓣电影TOP250排行的地址:

https://movie.douban.com/top250?start=

本次爬取,共分3个步骤:

1、获取单个页面的HTML

https://movie.douban.com/top250?start=

https://movie.douban.com/top250?start=25

 

2、对对个页面的HTML进行提取,在这里采用正则表达式进行提取,分别提取:电影排行,电影的详情地址,电影海报的图片,电影名称和电影评分。

如《肖申克的救赎》,则分别获取的内容包括:

(1)、电影排行,1

(2)、电影名称:肖申克的救赎

(3)、电影评分:9.7

(4)、电影详情:https://movie.douban.com/subject/1292052/

(5)、电影封面的地址:https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg

利用正则表达式进行提取,并写入txt文件

 

3、将电影封面图片,写入到文件夹中。

 

附上源代码:

#使用正则表达式,抓取豆瓣电影TOP250的电影内容,包括:排名,电影的详情地址,电影封面图片,电影名称,电影评分;

import requests
import re
import time
import os

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}


def get_page(url):#获取当前连接的HTML源代码
    response = requests.get(url)
    if response.status_code == 200:
        return response.text#返回HTML源代码
    return None


def parse_page(html, page):
    pattern = re.compile('<div class="item">.*?<em class="">(.*?)</em>.*?'
                         'href="(.*?)".*?'
                         'src="(.*?)".*?<div class="info">.*?'
                         '<span class="title">(.*?)</span>.*?'
                         'property="v:average">(.*?)</span>'
                         '', re.S)#正则表达式,获取的分别是 电影排行,电影详情的链接,电影封面的图片链接,电影名称,电影的评分
    items = re.findall(pattern, html)
    for item in items:
        write_file(item)
        save_image(item, page)


def save_image(item, page):
    img_response = requests.get(item[2])#item[2]即为图片的链接;
    print(item[2], img_response.status_code)
    filename = item[3] + '.' + str(item[2]).split('.')[-1]#图片名称:电影名称+.ipg
    dirnames = './img/{}'.format(page)#创建目录,目录名称为,0,25,50...225
    if not os.path.exists(dirnames):
        os.makedirs(dirnames)
    with open('{}/{}'.format(dirnames, filename), 'wb') as f:
        f.write(img_response.content)


def write_file(content):
    with open('douban_top250movie.txt', 'a') as f:
        f.write(str(content)+'\n')#电影排名,电影的详情链接,电影海报的图片,电影名称,电影评分,存入到txt文件中;


def main(start):
    url = 'https://movie.douban.com/top250?start=' + str(start)#top250电影排行榜的每个网页地址
    html = get_page(url)
    parse_page(html, start)


if __name__ == '__main__':
    for i in range(10):
        main(i*25)
        time.sleep(2)

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐