简介
在本文中,我们将尝试借助一个漂亮的汤库来删除电影的细节。这个库对于从 HTML 页面抓取数据和解析器非常有用。
下面显示了我们将收集到的电影细节的链接:
[http://www.imdb.com/search/title?release_date=2021&sort=num_votes,desc&page=1](http://www.imdb.com/search/title?release_date=2021&sort=num_votes,desc&page=1)
我们将从这个页面中抓取的内容是movie_name
、release_year
、imdb
评分、metascore
和total_users
投票。
首先,我们需要使用请求库来获取页面细节。
from requests import get
url = 'http://www.imdb.com/search/title?release_date=2021&
sort=num_votes,desc&page=1'response = get(url)
print(response.text[:500])
现在,我们将使用漂亮的汤从数据中提取文本。
from bs4 import BeautifulSoup
html_soup = BeautifulSoup(response.text, 'html.parser')
type(html_soup)#output:
bs4.BeautifulSoup
HTML 页面包含一个带有 class 属性的“div”标记。因此,我们将创建一个变量来保存所有具有特定类值的 div 类。
movie_containers = html_soup.find_all('div', class_ = 'lister-item
mode-advanced')
print(type(movie_containers))
print(len(movie_containers))#output:
<class 'bs4.element.ResultSet'>
50
所以,一个页面上的电影评论数量是 50。开始提取 2021 年第一部电影的数据。
first_movie = movie_containers[0]
first_movie.div#output:
<div class="lister-top-right">
<div class="ribbonize" data-caller="filmosearch" data-tconst="tt12361974"></div>
</div>-------------------------------------------------------------first_movie.a#output:
<a href="/title/tt12361974/"> <img alt="Zack Snyder's Justice League" class="loadlate" data-tconst="tt12361974" height="98">
</a>-------------------------------------------------------------first_movie.h3#output:
<h3 class="lister-item-header">
<span class="lister-item-index unbold text-primary">1.</span>
<a href="/title/tt12361974/">Zack Snyder's Justice League</a>
<span class="lister-item-year text-muted unbold">(2021)</span>
</h3>
如果我们在上面的代码中看到,h3 标题标签包含了锚标签中的电影名称。因此,我们需要从锚标签中获取电影名称。
first_movie.h3.a#output:
<a href="/title/tt12361974/">Zack Snyder's Justice League</a>-------------------------------------------------------------first_name = first_movie.h3.a.text
first_name#output:
"Zack Snyder's Justice League"
我们得到了第一部电影的名字,现在我们将试着找到上映的年份。h3 标题标记内的年份是 span 标记。
first_year = first_movie.h3.find('span', class_ = 'lister-item-year
text-muted unbold')
first_year#output:
<span class="lister-item-year text-muted unbold">(2021)</span>-------------------------------------------------------------first_year = first_year.text
first_year = first_year.replace('(','')
first_year = first_year.replace(')','')
first_year#output:
'2021'
是时候获得这部电影的 IMDb 评分了。
first_imdb = float(first_movie.strong.text)
first_imdb#output:
81
为了找到电影的投票,我们需要检查 span 属性。
first_votes = first_movie.find('span', attrs = {'name':'nv'})
first_votes#output:
<span data-value="335227" name="nv">335,227</span>-------------------------------------------------------------first_votes = int(first_votes['data-value'])
first_votes#output:
335227
pub.towardsai.net](/introduction-to-mlops-for-data-science-e2ca5a759f68) [## 忘记 HTML 和 Flask,开始使用 Streamlit
medium.com](https://medium.com/pythoneers/forget-html-and-flask-start-using-streamlit-1b394cfe4595)
是时候获取这一页所有电影的所有信息了。
**#Make a empty list of all variables**
names = []
years = []
imdb_ratings = []
metascores = []
votes = []**# Extract data from individual movie container**
for container in movie_containers:
**# The name**
name = container.h3.a.text
names.append(name)**# The year**
year = container.h3.find('span', class_ = 'lister-item-year').text
years.append(year)**# The IMDB rating**
imdb = float(container.strong.text)
imdb_ratings.append(imdb)**# The Metascore**
m_score = container.find('span', class_ = 'metascore')
if m_score is not None:
metascores.append(int(m_score.text))
else:
metascores.append(None)**# The number of votes**
vote = container.find('span', attrs = {'name':'nv'})['data-value']
votes.append(int(vote))
现在,我们将制作从电影页面收集的信息的数据框架。
import pandas as pd
test_df = pd.DataFrame({'movie_name': names,
'release_year': years,
'imdb': imdb_ratings,
'metascore': metascores,
'votes': votes
})
print(test_df.info())
test_df
这个电影网站的第一页包含了这部电影的 50 个条目,我们从第一页中提取了这些信息。
结论
网页抓取对于数据科学和机器学习的人来说是一个非常有用的工具。
我希望你喜欢这篇文章。通过我的 LinkedIn 和 twitter 联系我。
1.8 Python 的主动学习见解收集模块 2。 NumPy:图像上的线性代数3。Python 中的异常处理概念 4。熊猫:处理分类数据 5。超参数:机器学习中的 RandomSeachCV 和 GridSearchCV 6。用 Python 7 全面讲解了线性回归。用 Python 充分解释了 Logistic 回归 8。数据分发使用 Numpy 与 Python 9。机器学习中的决策树 vs 随机森林 10。用 Python 实现数据预处理的标准化