IMDB电影排行爬取分析

IMDB电影排行爬取分析,第1张

概述一.打开IMDB电影T250排行可以看见250条电影数据,电影名,评分等数据都可以看见 按F12进入开发者模式,找到这些数据对应的HTML网页结构,如下所示 可以看见里面有链接,点击链接可以进入电影详情页面,这可以看见导演,编剧,演员信息 同样查看HTML结构,可以找到相关信息的节点位置 演员信息可以在这个页面的cast中查看完整的信息 HTML页面结构 分析完整个要爬取的数据,现在来获取首页25

一.打开IMDB电影T250排行可以看见250条电影数据,电影名,评分等数据都可以看见

按F12进入开发者模式,找到这些数据对应的HTML网页结构,如下所示

可以看见里面有链接,点击链接可以进入电影详情页面,这可以看见导演,编剧,演员信息

同样查看HTML结构,可以找到相关信息的节点位置

演员信息可以在这个页面的cast中查看完整的信息

HTML页面结构

分析完整个要爬取的数据,现在来获取首页250条电影信息

1.整个爬虫代码需要使用的相关库

import reimport pyMysqLimport Jsonimport requestsfrom bs4 import BeautifulSoupfrom requests.exceptions import RequestException

2.请求首页的HTML网页,(如果请求不通过可以添加相关header),返回网页内容

def get_HTML(url):    response=requests.get(url)    if response.status_code==200:        #判断请求是否成功        return  response.text    else:        return None

3.解析HTML

def parse_HTML(HTML):    #进行页面数据提取    soup = BeautifulSoup(HTML,lxml)    movIEs = soup.select(tbody tr)    for movIE in movIEs:        poster = movIE.select_one(.posterColumn)        score = poster.select_one(span[name="ir"])[data-value]        movIE_link = movIE.select_one(.TitleColumn).select_one(a)[href]        #电影详情链接        year_str = movIE.select_one(.TitleColumn).select_one(span).get_text()        year_pattern = re.compile(\d{4})        year = int(year_pattern.search(year_str).group())        ID_pattern = re.compile(r(?<=tt)\d+(?=/?))        movIE_ID = int(ID_pattern.search(movIE_link).group())        #movIE_ID不使用默认生成的,从数据提取唯一的ID        movIE_name = movIE.select_one(.TitleColumn).select_one(a).string        #使用yIEld生成器,生成每一条电影信息        yIEld {            movIE_ID: movIE_ID,movIE_name: movIE_name,year: year,movIE_link: movIE_link,movIE_rate: float(score)        }

4.我们可以保存文件到txt文本

def write_file(content):    with open(movIE12.txt,a,enCoding=utf-8)as f:        f.write(Json.dumps(content,ensure_ascii=False)+\n)def main():    url=https://www.imdb.com/chart/top    HTML=get_HTML(url)    for item in parse_HTML(HTML):        write_file(item)if __name__ == __main__:    main()

5.数据可以看见

6.如果成功了,可以修改代码保存数据到MysqL,使用Navicat来 *** 作非常方便先连接到MysqL

db = pyMysqL.connect(host="localhost",user="root",password="********",db="imdb_movIE")cursor = db.cursor()

创建数据表

CREATE table `top_250_movIEs` (`ID` int(11) NOT NulL,`name` varchar(45) NOT NulL,`year` int(11) DEFAulT NulL,`rate` float NOT NulL,PRIMARY KEY (`ID`))

接下来修改代码, *** 作数据加入数据表

def store_movIE_data_to_db(movIE_data):    sel_sql =  "SELECT * FROM top_250_movIEs        WHERE ID =  %d" % (movIE_data[movIE_ID])    try:        cursor.execute(sel_sql)        result = cursor.fetchall()    except:        print("Failed to fetch data")    if result.__len__() == 0:        sql = "INSERT INTO top_250_movIEs                     (ID,name,year,rate)                  VALUES (‘%d‘,‘%s‘,‘%d‘,‘%f‘)" %               (movIE_data[movIE_ID],movIE_data[movIE_name],movIE_data[year],movIE_data[movIE_rate])        try:            cursor.execute(sql)            db.commit()            print("movIE data ADDED to DB table top_250_movIEs!")        except:            # 发生错误时回滚            db.rollback()    else:        print("This movIE ALREADY EXISTED!!!")

运行

def main():    url=https://www.imdb.com/chart/top    HTML=get_HTML(url)    for item in parse_HTML(HTML):        store_movIE_data_to_db(item)if __name__ == __main__:    main()

查看Navicat,可以看到保存到MysqL的数据。

总结

以上是内存溢出为你收集整理的IMDB电影排行爬取分析全部内容,希望文章能够帮你解决IMDB电影排行爬取分析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存