抓取猫眼电影排行
- 2019 年 10 月 10 日
- 筆記
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40313634/article/details/89502198
抓取猫眼电影排行
环境
技术:requests 爬取网页 + 正则表达式解析网页
编辑:sublime + python3
爬取网站:https://maoyan.com/board/4?offset=0
代码实现
import requests import re # 正则表达式的库 import json import random import os # 操作系统文件操作的库 ''' 功能:爬取单个网页信息的文本内容 入参:待爬取网页的网址 ''' def get_one_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' # 假装这是用谷歌浏览器访问的,而不是爬虫爬取。 } # 如果爬取成功,则返回爬取的网页文本信息;负责返回None。 response = requests.get(url, headers=headers) if response.status_code == 200: return response.text return None ''' 功能:爬取单个网页信息的二进制内容(图片、视频等) 入参:待爬取网页的网址 说明:response.content表示爬取的二进制内容;response.text表示爬取的文本内容。只是和get_one_page的返回值不一样,两个接口是可以合并的。 ''' def get_one_image(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' } response = requests.get(url, headers=headers) if response.status_code == 200: return response.content return None ''' 功能:解析网页中的电影排名、图片、标题、演员、时间、评分等信息 入参:爬取的网页内容 ''' def parse_one_page(html): # 根据网页格式,结合待爬取的内容,得到的正则表达式 pattern = re.compile('''<dd>.*?board-index.*?>(.*?)</i>.*?title="(.*?)".*?<img data-src="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)<.*?class="integer">(.*?)<.*?"fraction">(.*?)<''', re.S) items = re.findall(pattern, html) # 查找到的信息存储在list里,将其改装成字典形式的 for item in items: yield{ 'index':item[0], 'title':item[1], 'image':item[2], 'actor':item[3].strip(), 'time':item[4], 'score':item[5] + item[6] } def write_to_file(content): # 将爬取到的电影信息保存到文件里;将其中的图片下载下来,图片名取随机数字。 with open('result.json', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) + ',n') html = get_one_image(content['image']) fdir = './image' if not os.path.exists(fdir): os.mkdir(fdir) os.chdir(fdir) num = random.random() with open(str(num)+'.jpg', 'wb') as f: f.write(html) os.chdir('..') def main(offset): # 根据偏移量,拼接每一个网页的网页地址,用于爬取数据。 url = 'https://maoyan.com/board/4?offset=' + str(offset) html = get_one_page(url) for item in parse_one_page(html): write_to_file(item) if __name__ == '__main__': # 循环获取网址偏移量。 for i in range(10): main(offset = i*10 )