Python爬虫是一种通过模拟人工浏览器行为,自动化地从互联网获取所需信息的程序。在数据挖掘、信息搜集和竞品分析等领域随处可见其身影,成为了数据科学家和网络公关的必备工具。
本文将介绍如何使用Python爬虫爬取电影信息,并通过分析数据制作出饼图显示不同电影类型的比例情况。同时,也会深入讲解相关知识。
### 爬取电影信息
爬虫需要借助一些库来实现,本案例使用的是Urllib、BeautifulSoup和pandas库,其中Urllib库负责从互联网获取数据,BeautifulSoup库负责解析数据,pandas库负责处理和存储数据。
```python
import urllib.request
from bs4 import BeautifulSoup
import pandas as pd
```
首先,需要定义一个函数,该函数需要传入两个参数,url和headers。其中,url表示要爬取的网页地址,headers则表示模拟人工浏览器的请求头信息。
```python
def get_movies(url, headers):
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
movie_list = soup.find_all('div', class_='movie-item')
movies = []
for movie in movie_list:
tmp = []
tmp.append(movie.find('span', class_='name').get_text())
tmp.append(movie.find('span', class_='star').get_text())
tmp.append(movie.find('span', class_='releasetime').get_text())
tmp.append(movie.find('span', class_='integer').get_text() +
movie.find('span', class_='fraction').get_text())
tmp.append(movie.find('a', class_='ticket-btn').get('data-act').split(':')[-1])
tmp.append(movie.find('div', class_='movie-hover-info').find_all('span')[1].get_text().strip())
movies.append(tmp)
return movies
```
有了这个函数,我们就可以将电影信息爬取下来了,例如,以下的代码将爬取猫眼电影的评分前100的电影信息。
```python
url = 'https://maoyan.com/board/4'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
movies = get_movies(url, headers)
```
### 分析数据,并制作饼图
有了电影的信息,我们可以通过dataFrame处理和分析数据,为了制作饼图,我们需要统计出不同电影类型的数量。但这需要先处理电影类型的信息。
其实,通过观察爬取下来的数据可以发现,电影类型的信息在电影详情页面可以找到。因此,我们需要再次定义一个函数,该函数需要传入一个电影详情页面的链接和headers,然后返回该电影的类型信息。
```python
def get_movie_type(url, headers):
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
movie_type_list = str(soup.find_all('div', class_='movie-brief-container')[0]).split('
movie_type = []
for i in range(1, len(movie_type_list)):
tmp = movie_type_list[i].split('
movie_type.append(tmp)
return movie_type
```
有了电影类型的信息,我们就可以开始统计不同电影类型的数量了。首先,我们需要创建一个空字典,然后遍历每一部电影,对于每一部电影,我们需要调用上面的`get_movie_type`函数来获取该电影的类型信息,然后遍历该电影的类型信息列表,将每个类型出现的次数累加到字典中。
```python
type_count = {}
for movie in movies:
movie_url = 'https://maoyan.com' + movie[-1]
movie_type = get_movie_type(movie_url, headers)
for t in movie_type:
type_count[t] = type_count.get(t, 0) + 1
```
最后,我们就可以使用matplotlib库绘制出饼图了。代码如下:
```python
import matplotlib.pyplot as plt
labels = []
sizes = []
for t, count in type_count.items():
labels.append(t)
sizes.append(count)
plt.pie(sizes, labels=labels, autopct='%1.1f%%',
shadow=False, startangle=90)
plt.axis('equal')
plt.title('Movie Types on MaoYan')
plt.show()
```
运行以上代码,我们就可以得到一个显示不同电影类型比例情况的饼图了。
### 相关知识:robots协议
截至2021年,许多网站都公布了其robots协议,该协议告诉爬虫程序如何爬取该网站的信息。其中最重要的两个属性是User-agent和Disallow。
User-agent是指爬虫程序的名称,该属性告诉服务器该如何处理不同名称的爬虫程序。例如,以下就是一个指定了不同爬虫程序的User-agent的例子。
```
User-agent: *
Disallow: /admin/
User-agent: Googlebot
Disallow: /private/
```
在该例子中,User-agent为*表示适用于所有爬虫程序,又因为在*之前没有使用Disallow,因此该规则适用于所有爬虫程序。而第二个User-agent为Googlebot,则表示该规则适用于Googlebot爬虫程序,Disallow:/private/表示该程序无法访问网站上的/private/目录。
总之,编写爬虫程序时,必须遵循robots协议规定,以免被网站封禁或产生不良影响。
### 结语
使用Python爬虫爬取电影信息,并通过分析数据制作出饼图是一项很有意思的任务。同时,我们也深入讲解了相关知识,例如robots协议等。希望本文能够帮助大家更好地了解Python爬虫的相关知识。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
你说你能干点啥,去打仗的话子弹飞弹会忍不住向你飞。