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

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

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

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

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

HTML页面结构

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

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

import re
import pymysql
import json
import requests
from bs4 import BeautifulSoup
from 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电影排行爬取分析的更多相关文章

  1. 豆瓣电影信息爬取(json)

    豆瓣电影信息爬取(json) # a = "hello world" # 字符串数据类型# b = {"name":"python"} # ...

  2. scrapy-redis实现爬虫分布式爬取分析与实现

    本文链接:http://blog.csdn.net/u012150179/article/details/38091411 一 scrapy-redis实现分布式爬取分析 所谓的scrapy-redi ...

  3. Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

    通过使Scrapy框架,掌握如何使用Twisted异步网络框架来处理网络通讯的问题,进行数据挖掘和对web站点页面提取结构化数据,可以加快我们的下载速度,也可深入接触各种中间件接口,灵活的完成各种需求 ...

  4. 用Python爬取分析【某东618】畅销商品销量数据,带你看看大家都喜欢买什么!

    618购物节,辰哥准备分析一波购物节大家都喜欢买什么?本文以某东为例,Python爬取618活动的畅销商品数据,并进行数据清洗,最后以可视化的方式从不同角度去了解畅销商品中,名列前茅的商品是哪些?销售 ...

  5. Python 从底层结构聊 Beautiful Soup 4(内置豆瓣最新电影排行榜爬取案例)

    1. 前言 什么是 Beautiful Soup 4 ? Beautiful Soup 4(简称 BS4,后面的 4 表示最新版本)是一个 Python 第三方库,具有解析 HTML 页面的功能,爬虫 ...

  6. python 豆瓣top250电影的爬取

    我们先看一下豆瓣的robot.txt 然后我们查看top250的网页链接和源代码 通过对比不难发现网页间只是start数字发生了变化. 我们可以知道电影内容都存在ol标签下的 div class属性为 ...

  7. 豆瓣电影top250爬取并保存在MongoDB里

    首先回顾一下MongoDB的基本操作: 数据库,集合,文档 db,show dbs,use 数据库名,drop 数据库 db.集合名.insert({}) db.集合名.update({条件},{$s ...

  8. Python爬虫+可视化教学:爬取分析宠物猫咪交易数据

    前言 各位,七夕快到了,想好要送什么礼物了吗? 昨天有朋友私信我,问我能用Python分析下网上小猫咪的数据,是想要送一只给女朋友,当做礼物. Python从零基础入门到实战系统教程.源码.视频 网上 ...

  9. Scrapy项目 - 数据简析 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

    一.数据分析截图(weka数据分析截图 ) 本例实验,使用Weka 3.7对豆瓣电影网页上所罗列的上映电影信息,如:标题.主要信息(年份.国家.类型)和评分等的信息进行数据分析,Weka 3.7数据分 ...

随机推荐

  1. 2016/2/19 css样式表 Cascading Style Sheet 叠层样式表 美化HTML网页

    一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控制精确,但是可重用性差,冗余较多. 例:<p style="font-size:14px;">内联 ...

  2. NTFS文件系统的单个文件最大到底有多大?

    于NTFS文件系统的单个文件最大到底有多大? 闲来无事突然想到这个问题,到网上搜索了一下也没有一个固定的解释. 于是到微软官方知识库去寻找答案: 注意:基础硬件限制可能会对任何文件系统施加额外的分区大 ...

  3. HDU 5762Teacher Bo

    Teacher Bo Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tota ...

  4. YTU 2636: B3 指向基类的指针访问派生类的成员函数

    2636: B3 指向基类的指针访问派生类的成员函数 时间限制: 1 Sec  内存限制: 128 MB 提交: 433  解决: 141 题目描述 领导类(Leader)和工程师类(Engineer ...

  5. bzoj 1497(最大权闭合子图)

    1497: [NOI2006]最大获利 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 6410  Solved: 3099[Submit][Status] ...

  6. Wedding(2-SAT)

    传送门 稍微复杂一点的2-SAT. 读题之后发现有以下限制: 1.每一对夫妻(包括新郎和新娘)不能坐在桌子的一侧. 2.对于一些给定的非法(自行脑补)的关系,这两个人不能坐在新娘的同一侧. 因为每个人 ...

  7. ODB——基于c++的ORM映射框架尝试(使用)

    摘要: 2.使用 首先,需要定义一个对象,用来和数据库字段对应: [cce lang=”cpp”] #ifndef VOLUME_H #define VOLUME_H #include #includ ...

  8. 32.ExtJS简单的动画效果

    转自:http://blog.sina.com.cn/s/blog_74684ec501015lhq.html 说明:这篇文章的大部分内容来源于网上,经过自己实现其效果后,整理如下: 在进行 Java ...

  9. 15_activity生命周期方法说明

    现在是可见并且可以被操作,所以现在是一个前台的Activity. 按一下Home键,它是先onPause然后onStop. 现在它就处于一个Stop停止的状态.停止的状态如果我当前内存够用的情况下,它 ...

  10. 【BZOJ2525】[Poi2011]Dynamite(二分,树形dp)

    [BZOJ2525][Poi2011]Dynamite Description Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了炸.药,现在需要点燃M个点上的引线引爆所有 ...