import requests from bs4 import BeautifulSoup import openpyxl def get_movie_data(year): url = f'https://maoyan.com/films?year={year}' headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') movies = soup.select('.movie-item-title') movie_data = [] for movie in movies: movie_link = 'https://maoyan.com' + movie.a['href'] movie_data.append(get_movie_details(movie_link)) return movie_data else: print(f"Failed to fetch data for year {year}") return [] def get_movie_details(url): headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') movie_name = soup.select_one('h1.name').text.strip() release_date = soup.select_one('.info-release').text.strip() genre = soup.select_one('.info-category').text.strip() director = soup.select_one('.info-director').text.strip() actors = [actor.text.strip() for actor in soup.select('.info-actor a')] maoyan_score = soup.select_one('.score-num').text.strip() box_office = soup.select_one('.info-num').text.strip() return { '电影名称': movie_name, '上映日期': release_date, '影片类型': genre, '导演': director, '演员': ', '.join(actors), '猫眼口碑': maoyan_score, '累计票房': box_office } else: print(f"Failed to fetch details for {url}") return {} def save_to_excel(data, filename): wb = openpyxl.Workbook() ws = wb.active headers = ['电影名称', '上映日期', '影片类型', '导演', '演员', '猫眼口碑', '累计票房'] ws.append(headers) for movie in data: row_data = [movie.get(header, '') for header in headers] ws.append(row_data) wb.save(filename) print(f"Data saved to {filename}") if __name__ == '__main__': years = range(2017, 2021) all_movie_data = [] for year in years: movie_data = get_movie_data(year) all_movie_data.extend(movie_data) save_to_excel(all_movie_data, 'maoyan_movies_2017_to_2020.xlsx')
时间: 2024-04-22 21:24:55 浏览: 194
这段代码是一个Python脚本,用于从猫眼电影网站上爬取指定年份的电影数据,并保存到Excel文件中。
代码使用了requests库来发送HTTP请求,使用BeautifulSoup库来解析HTML内容,使用openpyxl库来操作Excel文件。
主要功能包括:
- `get_movie_data(year)`函数:根据指定年份获取电影数据的函数。
- `get_movie_details(url)`函数:获取电影详情的函数。
- `save_to_excel(data, filename)`函数:将电影数据保存到Excel文件的函数。
在主程序中,通过循环遍历2017年到2020年的年份,调用`get_movie_data(year)`函数获取电影数据,然后将所有电影数据保存到名为`maoyan_movies_2017_to_2020.xlsx`的Excel文件中。
注意:爬取网站数据时,请遵守网站的相关规定和法律法规,不要过度请求或滥用。
相关问题
import requests from bs4 import BeautifulSoup url = "https://movie.douban.com/top250" response = re
您提供的代码片段是在Python中使用requests库获取网页内容,并结合BeautifulSoup库解析HTML文档。`import requests`导入了HTTP请求处理模块,用于发送GET请求到指定URL;`from bs4 import BeautifulSoup`导入了BeautifulSoup库,它是一个强大的HTML和XML解析器,可以帮助我们从HTML文件中提取数据。
这里的`url = "https://movie.douban.com/top250"`指定了要抓取的豆瓣电影Top250页面地址。然后通过`response = requests.get(url)`发起GET请求并获取服务器返回的数据(通常是HTML文本)。
接下来,会使用BeautifulSoup对响应内容进行解析,例如,可以使用`.soup`属性创建一个BeautifulSoup对象,然后通过各种方法(如`.find_all()`、`.select()`等)查找特定的HTML元素,并提取出所需的信息,比如电影标题、评分等。
```python
soup = BeautifulSoup(response.text, 'html.parser')
movies = soup.select('div.item') # 获取所有电影信息的div元素
for movie in movies:
title = movie.h3.a.text # 提取电影标题
rating = movie.find('span', class_='rating_num').text # 提取评分
print(f"电影标题:{title}, 评分:{rating}")
```
from bs4 import BeautifulSoup import requests import openpyxl def get_html(url): try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: r='fail' return r def get_contents(ulist,rurl): soup=BeautifulSoup(rurl,'html.parser') trs=soup.find_all('tr') for tr in trs: ui=[] for td in tr: ts=td.string ts=ts.strip() if ts == '': continue ui.append(ts) ulist.append(ui) def saveList(ulist): wb=openpyxl.Workbook() ws=wb.active r=1 for line in ulist: for col in range(1,len(line)+1): ws.cell(row=r,column=col).value=line[col-1] r=r+1 wb.save('saveqiye500.xlsx') if __name__=="__main__": urli=[] url="https://www.maigoo.com/news/540732.html" rs=get_html(url) get_contents(urli,rs) saveList(urli)
这段代码是一个 Python 爬虫,目的是从指定网址 https://www.maigoo.com/news/540732.html 中获取企业社会责任500优完整名单,并将结果保存在 Excel 表格中。
代码中使用了 requests 库和 BeautifulSoup 库来获取网页内容和解析网页。其中,get_html() 函数用于获取网页内容,get_contents() 函数用于解析网页内容并将结果保存在一个列表中,saveList() 函数用于将列表中的数据保存在 Excel 表格中。
代码中的 if __name__=="__main__": 是 Python 中的特殊语句,表示如果该脚本被直接运行,而不是被导入到其他脚本中,那么就执行下面的语句。在这里,程序首先定义了一个空列表 urli,然后调用 get_html() 函数获取网页内容,接着将网页内容传递给 get_contents() 函数解析网页,并将解析得到的结果保存在 urli 列表中,最后将 urli 列表中的数据保存在 Excel 表格中。
不过需要注意的是,这段代码并没有考虑网页爬取的法律和道德问题,如果没有得到网站所有者的许可,对网站进行爬取可能会触犯法律,严重的甚至可能会导致刑事责任。因此,建议在进行网页爬取前,先了解相关法律法规和伦理道德规范,并遵守相关规定。
阅读全文