我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用Python爬虫实现抓取电影网站信息并入库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用Python爬虫实现抓取电影网站信息并入库

这篇文章主要介绍如何使用Python爬虫实现抓取电影网站信息并入库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一.环境搭建

1.下载安装包

访问 Python官网下载地址:https://www.python.org/downloads/

下载适合自己系统的安装包:

如何使用Python爬虫实现抓取电影网站信息并入库

我用的是 Windows 环境,所以直接下的 exe 包进行安装。

下载后,双击下载包,进入 Python 安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可。

2.修改环境变量

如何使用Python爬虫实现抓取电影网站信息并入库

右键点击"计算机",点击"属性";

然后点击"高级系统设置"-“环境变量”;

选择"系统变量"窗口下面的 “Path” ,添加 python 安装路径;

设置成功以后,在cmd命令行,输入命令"python",有显示则说明配置成功。

3.安装依赖模块

我们的爬取程序需要安装的依赖模块包括 requests,lxml,pymysql ,步骤如下:

进入python安装目录下的Scripts目录,点击地址栏输入“cmd” 打开命令行工具:

如何使用Python爬虫实现抓取电影网站信息并入库

在这个路径下安装对应的 requests,lxml,pymysql 依赖:

如何使用Python爬虫实现抓取电影网站信息并入库

需要输入的命令:

// 安装requests依赖pip install requests// 安装lxml依赖pip install lxml// 安装pymysql依赖pip install pymysql

二.代码开发

开发 collectMovies.py

#!/user/bin env python# 获取电影天堂详细信息import requestsimport timefrom lxml import etreeimport pymysqlrequests.adapters.DEFAULT_RETRIES = 5# 伪装浏览器HEADERS ={'User-Agent':'Mozilla/5.(Windows NT 10.0; WOW64) AppleWebKit/537.3(KHTML, like Gecko) Chrome/63.0.3239.13Safari/537.36',    'Host':'www.dy2018.com'}# 定义全局变量BASE_DOMAIN = 'https://www.dy2018.com/'# 获取首页网页信息并解析def getUrlText(url,coding):s = requests.session()#print("获取首页网页信息并解析:", url)respons = s.get(url,headers=HEADERS)print("请求URL:", url)if(coding=='c'):urlText = respons.content.decode('gbk')html = etree.HTML(urlText)  # 使用lxml解析网页else:urlText = respons.texthtml = etree.HTML(urlText)  # 使用lxml解析网页s.keep_alive = Falsereturn html# 获取电影详情页的href,text解析def getHref(url):html = getUrlText(url,'t')aHref = html.xpath('//table[@class="tbspan"]//a/@href')print("获取电影详情页的href,text解析```")htmlAll = map(lambda url:BASE_DOMAIN+url,aHref) # 给每个href补充BASE_DOMAINreturn htmlAll# 使用content解析电影详情页,并获取详细信息数据def getPage(url):html = getUrlText(url,'c')moveInfo = {}  # 定义电影信息mName = html.xpath('//div[@class="title_all"]//h2/text()')[0]moveInfo['movie_name'] = mNamemDiv = html.xpath('//div[@id="Zoom"]')[0]mImgclass="lazy" data-src = mDiv.xpath('.//img/@class="lazy" data-src')moveInfo['image_path'] = mImgclass="lazy" data-src[0]  # 获取海报class="lazy" data-src地址if len(mImgclass="lazy" data-src) >= 2:moveInfo['screenshot'] = mImgclass="lazy" data-src[1]  # 获取电影截图class="lazy" data-src地址mContnent = mDiv.xpath('.//text()')def pares_info(info,rule):''':param info: 字符串:param rule: 替换字串:return:  指定字符串替换为空,并剔除左右空格'''return info.replace(rule,'').strip()for index,t in enumerate(mContnent):if t.startswith('◎译  名'):name = pares_info(t,'◎译  名')moveInfo['translation']=nameelif t.startswith('◎片  名'):name = pares_info(t,'◎片  名')moveInfo['movie_title']=nameelif t.startswith('◎年  代'):name = pares_info(t,'◎年  代')moveInfo['movie_age']=nameelif t.startswith('◎产  地'):name = pares_info(t,'◎产  地')moveInfo['movie_place']=nameelif t.startswith('◎类  别'):name = pares_info(t,'◎类  别')moveInfo['category']=nameelif t.startswith('◎语  言'):name = pares_info(t,'◎语  言')moveInfo['language']=nameelif t.startswith('◎字  幕'):name = pares_info(t,'◎字  幕')moveInfo['subtitle']=nameelif t.startswith('◎上映日期'):name = pares_info(t,'◎上映日期')moveInfo['release_date']=nameelif t.startswith('◎豆瓣评分'):name = pares_info(t,'◎豆瓣评分')moveInfo['douban_score']=nameelif t.startswith('◎片  长'):name = pares_info(t,'◎片  长')moveInfo['file_length']=nameelif t.startswith('◎导  演'):name = pares_info(t,'◎导  演')moveInfo['director']=nameelif t.startswith('◎编  剧'):name = pares_info(t, '◎编  剧')writers = [name]for i in range(index + 1, len(mContnent)):writer = mContnent[i].strip()if writer.startswith('◎'):breakwriters.append(writer)moveInfo['screenwriter'] = writerselif t.startswith('◎主  演'):name = pares_info(t, '◎主  演')actors = [name]for i in range(index+1,len(mContnent)):actor = mContnent[i].strip()if actor.startswith('◎'):breakactors.append(actor)moveInfo['stars'] = " ".join(actors)elif t.startswith('◎标  签'):name = pares_info(t,'◎标  签')moveInfo['tags']=nameelif t.startswith('◎简  介'):name = pares_info(t,'◎简  介')profiles = []for i in range(index + 1, len(mContnent)):profile = mContnent[i].strip()if profile.startswith('◎获奖情况') or '【下载地址】' in profile:breakprofiles.append(profile)moveInfo['introduction']=" ".join(profiles)elif t.startswith('◎获奖情况'):name = pares_info(t,'◎获奖情况')awards = []for i in range(index + 1, len(mContnent)):award = mContnent[i].strip()if '【下载地址】' in award:breakawards.append(award)moveInfo['awards']=" ".join(awards)moveInfo['movie_url'] = urlreturn moveInfo# 获取前n页所有电影的详情页hrefdef spider():#连接数据库base_url = 'https://www.dy2018.com/html/gndy/dyzz/index_{}.html'moves = []m = int(input('请输入您要获取的开始页:'))n = int(input('请输入您要获取的结束页:'))print('即将写入第{}页到第{}页的电影信息,请稍后...'.format(m, n))for i in range(m,n+1):print('******* 第{}页电影 正在写入 ********'.format(i))if i == 1:url = "https://www.dy2018.com/html/gndy/dyzz/"else:url = base_url.format(i)moveHref = getHref(url)print("休息2s后再进行操作")time.sleep(2)for index,mhref in enumerate(moveHref):print('---- 正在处理第{}部电影----'.format(index+1))move = getPage(mhref)moves.append(move)# 将电影信息写入数据库db = pymysql.connect(host='127.0.0.1',user='root', password='123456', port=3306, db='你的数据库名称')table = 'movies'i = 1for data in moves:keys = ', '.join(data.keys())values = ', '.join(['%s'] * len(data))sql = 'INSERT INTO {table}(id,{keys}) VALUES (null,{values})'.format(table=table, keys=keys, values=values)try:cursor = db.cursor()cursor.execute(sql, tuple(data.values()))print('本条数据成功执行!')if i%10==0:   db.commit()except Exception as e:   print('将电影信息写入数据库发生异常!',repr(e))   db.rollback()cursor.close()i = i + 1db.commit()db.close()print('写入数据库完成!')if __name__ == '__main__':spider()

三.运行测试

1.新建电影信息表

CREATE TABLE `movies` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `movie_name` varchar(255) DEFAULT NULL,  `image_path` varchar(255) DEFAULT NULL,  `screenshot` varchar(255) DEFAULT NULL,  `translation` varchar(255) DEFAULT NULL,  `movie_title` varchar(255) DEFAULT NULL,  `movie_age` varchar(50) DEFAULT NULL,  `movie_place` varchar(50) DEFAULT NULL,  `category` varchar(100) DEFAULT NULL,  `language` varchar(100) DEFAULT NULL,  `subtitle` varchar(100) DEFAULT NULL,  `release_date` varchar(50) DEFAULT NULL,  `douban_score` varchar(50) DEFAULT NULL,  `file_length` varchar(255) DEFAULT NULL,  `director` varchar(100) DEFAULT NULL,  `screenwriter` varchar(100) DEFAULT NULL,  `stars` mediumtext,  `tags` varchar(255) DEFAULT NULL,  `introduction` mediumtext,  `awards` text,  `movie_url` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2.代码运行

打开 collectMovies.py 所在目录,输入命令运行:

python collectMovies.py

运行结果如下:

如何使用Python爬虫实现抓取电影网站信息并入库

如何使用Python爬虫实现抓取电影网站信息并入库

查看数据库表,数据已成功插入:

如何使用Python爬虫实现抓取电影网站信息并入库

四.问题排查和修复

1.空白字符报错

第一次使用 Python,不太熟悉它的规则,空格和Tab混用,运行会报如下错:

unindent does not match any outer indentation level

解决方法

下载 Notepad++,选择 “编辑” – “空白字符操作” – "空格转 Tab (行首)"即可。

2.请求报错

修改好格式之后再次运行,反反复复的报请求的错,报错信息主要包括以下内容:

ssl.SSLEOFError: EOF occurred in violation of protocol······Max retries exceeded with url

解决方法

本来以为是请求设置出了问题,各种百度,还安装了 pip install incremental ,但是依然没有奏效。

后来把请求的网址换成百度网就不报错了,这样可以定位到是原网址的访问出了问题,更换了采集源路径,该问题解决。

以上是“如何使用Python爬虫实现抓取电影网站信息并入库”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用Python爬虫实现抓取电影网站信息并入库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用Python爬虫实现抓取电影网站信息并入库

这篇文章主要介绍如何使用Python爬虫实现抓取电影网站信息并入库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一.环境搭建1.下载安装包访问 Python官网下载地址:https://www.python.org/
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录