自学的第一个爬虫,这是一个笔记,爬取时光电影TOP100的电影信息
这是一个爬虫实例
第一步:分析网页
插入要用到的库
import pandas as pd
from bs4 import BeautifulSoup as BS
import requests
import re
import time
import json
headers = {"User-Agent": "Mozilla/5.0"}
top100的电影详细评分都在电影各自链接中
首先要获得每个电影的链接
定义一个获得链接的函数
def getURL(urlm,movie_LIST):
try:
r = requests.get(urlm,headers=headers)
r.raise_for_status()
soup =BS(r.text,"lxml")
a_her = soup.find_all("div",class_="mov_pic")
for a in a_her:
movie_her = a.a.attrs["href"]
movie_LIST.append(movie_her)
except:
print("连接失败")
第二步: 分析电影页面中的信息
找到真实信息所在的位置,并返回链接
def getAJAXurl(url):
movie_id = url.split("/")[-2]
t = time.strftime("%Y%m%d%H%M%S0368", time.localtime())
ajaxurl = "http://service.library.mtime.com/Movie.api?Ajax_CallBack=true&Ajax_CallBackType=Mtime.Library.Services&Ajax_CallBackMethod=GetMovieOverviewRating&Ajax_CrossDomain=1&Ajax_RequestUrl=%s&t=%s&Ajax_CallBackArgument0=%s" % (url,t,movie_id)
return ajaxurl
第三步:定义爬取数据函数
解析出json格式中的各个信息
def getMOVIEinfo(ajaxurl,datalist):
r = requests.get(ajaxurl,headers=headers)
r.raise_for_status()
result = re.findall(r'=(.*?);',r.text)[0]
if result is not None:
value = json.loads(result)
if value.get("value") is not None:
movieTitle = value.get("value").get("movieTitle")
movieRa = value.get("value").get("movieRating")
ratingFinal = movieRa.get('RatingFinal')
directorFinal = movieRa.get('RDirectorFinal')
otherFinal = movieRa.get('ROtherFinal')
pictureFinal = movieRa.get('RPictureFinal')
storyFinal = movieRa.get('RStoryFinal')
datalist.append([movieTitle,ratingFinal,directorFinal,otherFinal,
pictureFinal,storyFinal])
return datalist
第四步:定义一个保存数据的函数
def saveMSG(infolist,columnsa):
fie = pd.DataFrame(infolist,columns=columnsa)
fie.to_excel("时光电影评分.xlsx")
第五步:定义主函数
利用循环爬取100个电影的信息
def main():
columnsa = ["电影名","综合评分","导演评分","音乐评分","画面评分","故事评分"]
datalist = []
movie_LIST = []
url = "http://www.mtime.com/top/movie/top100/"
for i in range(1,11):
if i == 1:
urls = url
else:
urls = url + "index-" + str(i) + ".html"
getURL(urls,movie_LIST)
for movie_h in movie_LIST:
info = getMOVIEinfo(getAJAXurl(movie_h),datalist)
saveMSG(info,columnsa)
执行程序
if __name__ == "__main__":
main()