猫眼电影TOP100榜电影信息的获取和储存
程序员文章站
2022-05-02 22:13:47
...
猫眼电影TOP100榜电影信息的获取和储存
首先,对网页进行解析;
# 获取网页
def GetHtml(url):
try:
# 修改网页的头部
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2714.400'}
r = requests.get(url,headers = headers)
# 查看网页是否访问成功
r.raise_for_status()
# 将网页解析内容转换为 utf-8 形式
r.encoding = r.apparent_encoding
return r.text
except RequestException:
return '访问失败'
接着,对网页信息进行提取(注意,find函数和find_all函数的区别, find函数返回匹配的第一个结果,以标签形式;find_all返回匹配的所有结果,以列表的形式);
# 获取该网页的电影信息
def parse_one_page(html):
# 将网页 html 代码转换为BeautifulSoup 能读懂的形式
soup = BeautifulSoup(html, 'lxml')
# 查找该页所有的电影, 返回列表形式,列表里是每个电影的信息
info = soup.find_all('dd')
result = []
for i in info:
# 获取电影的排名
order = i.find('i').string
# 获取电影的名字
name = i.find('p', class_ = 'name').get_text()
# 获取电影的海报
image = i.find('img', class_ = 'board-img').get('data-src')
# 获取电影主演
actor = i.find('p', class_ = 'star').get_text().strip()[3:]
# 获取电影上映时间
times = i.find('p', class_ = 'releasetime').get_text()[5:]
# 获取电影评分整数部分
score1 = i.find('i', class_ = 'integer').string
# 获取电影评分小数部分
score2 = i.find('i', class_ = 'fraction').string
# 将整数部分与小数部分合并
score = score1 + score2
# 以字典形式加入列表里
result.append({'排名':order, '海报':image, '电影名':name, '主演':actor,
'上映时间':times, '评分':score})
return result
然后, 储存为txt格式;
# 储存为 txt 格式
def write_to_file(content):
# ’a‘ 表示追加
with open('TOP100.txt', 'a', encoding = 'utf-8') as f:
# json.dumps() 将json对象转换为json文本形式
f.write(json.dumps(content, ensure_ascii = False) + '\n')
最后,定义一个总函数,对网页进行循环遍历
def main(offset):
# 获取网页网址
url = 'https://maoyan.com/board/4?offset=' + str(offset)
html = GetHtml(url)
content = parse_one_page(html)
for item in content:
print(item)
write_to_file(item)
总代码如下:
from bs4 import BeautifulSoup
import requests
import json
from requests.exceptions import RequestException
import time
import pandas as pd
# 获取网页
def GetHtml(url):
try:
# 修改网页的头部
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2714.400'}
r = requests.get(url,headers = headers)
# 查看网页是否访问成功
r.raise_for_status()
# 将网页解析内容转换为 utf-8 形式
r.encoding = r.apparent_encoding
return r.text
except RequestException:
return '访问失败'
# 获取该网页的电影信息
def parse_one_page(html):
# 将网页 html 代码转换为BeautifulSoup 能读懂的形式
soup = BeautifulSoup(html, 'lxml')
# 查找该页所有的电影, 返回列表形式,列表里是每个电影的信息
info = soup.find_all('dd')
result = []
for i in info:
# 获取电影的排名
order = i.find('i').string
# 获取电影的名字
name = i.find('p', class_ = 'name').get_text()
# 获取电影的海报
image = i.find('img', class_ = 'board-img').get('data-src')
# 获取电影主演
actor = i.find('p', class_ = 'star').get_text().strip()[3:]
# 获取电影上映时间
times = i.find('p', class_ = 'releasetime').get_text()[5:]
# 获取电影评分整数部分
score1 = i.find('i', class_ = 'integer').string
# 获取电影评分小数部分
score2 = i.find('i', class_ = 'fraction').string
# 将整数部分与小数部分合并
score = score1 + score2
# 以字典形式加入列表里
result.append({'排名':order, '海报':image, '电影名':name, '主演':actor,
'上映时间':times, '评分':score})
return result
# 储存为 txt 格式
def write_to_file(content):
# ’a‘ 表示追加
with open('TOP100.txt', 'a', encoding = 'utf-8') as f:
# json.dumps() 将json对象转换为json文本形式
f.write(json.dumps(content, ensure_ascii = False) + '\n')
def main(offset):
# 获取网页网址
url = 'https://maoyan.com/board/4?offset=' + str(offset)
html = GetHtml(url)
content = parse_one_page(html)
for item in content:
print(item)
write_to_file(item)
# 获取每一页电影的信息
for i in range(10):
main(offset = i * 10)
time.sleep(1)