一.打开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电影排行爬取分析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)