Python爬取《权力的游戏第八季》演员数据并分析
数据爬取
一、浏览待爬取网页
首先浏览待爬取网页即百度百科《权力的游戏第八季》页面,发现演员表处有每个演员的词条链接,所有可以通过爬取此处获得每个演员的词条链接,方便对每个演员的详细信息进行爬取:
接着进入龙母的词条页面:
发现此处有其基本信息:
所以我们可以通过之前爬取获得的每个演员的词条链接,再把每个演员的基本信息进行爬取并保存下来,便于后续进行数据分析。
二、爬取百度百科中《权力的游戏第八季度》演员表获得每个演员的链接并保存入文件
import re
import requests
import json
import pandas
import os
import sys
from bs4 import BeautifulSoup
#获取请求
def getHTMLText(url,kv):
try:
r = requests.get(url, headers=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except Exception as e:
print(e)
#解析出演员姓名与链接数据并存入文件
def parserData(text):
soup = BeautifulSoup(text,'lxml')
review_list = soup.find_all('li',{
'class':'pages'})
soup1 = BeautifulSoup(str(review_list),'lxml')
all_dts = soup1.find_all('dt')
stars = []
for dt in all_dts:
star = {
}
star["name"] = dt.find('a').text
star["link"] = 'https://baike.baidu.com' + dt.find('a').get('href')
stars.append(star)
json_data = json.loads(str(stars).replace("\'","\""))
with open('work/'+'stars.json','w',encoding='UTF-8') as f:
json.dump(json_data,f,ensure_ascii=False)
三、爬取演员详细信息并保存入文件(其中还下载保存了每个演员的图片)
#爬取并解析出演员详细信息与图片并存入文件
def crawl_everyone(kv):
with open('work/' + 'stars.json', 'r', encoding='UTF-8') as file:
json_array = json.loads(file.read())
star_infos = []
for star in json_array:
star_info = {
}
name = star['name']
link = star['link']
star_info['name'] = name
#向选手个人百度百科发送一个http get请求
r = requests.get(link,headers=kv)
soup = BeautifulSoup(r.text,'lxml')
#获取选手的国籍、星座、身高、出生日期等信息
base_info_div = soup.find('div',{
'class':'basic-info cmn-clearfix'})
dls = base_info_div.find_all('dl')