本文,使用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)
