最新版电影网站源码分享?最新版电影网站源码分享大全

大家好,今天来为大家解答最新版电影网站源码分享这个问题的一些问题点,包括最新版电影网站源码分享大全也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

熟悉Python的requests库即re之后,可以尝试构建一个简单的爬虫系统。我们选用网站结构比较稳定且不会造成较大服务器负载的豆瓣网站,爬取豆瓣评分top250的电影名称、封面等详细信息。

一、网页分析

1.网页概览

首先在浏览器中输入以下网址打开爬取的目标网站豆瓣电影top250:https://movie.douban.com/top250?start=225&filter=,得到如下界面。

通过查看豆瓣电影官网的robots协议,发现此网站并不在Disallow里,表明该网站不限制爬取。

2.匹配分析

接着按下F12键查看谷歌浏览器的Devtools工具,发现第一部电影(即肖申克的救赎)的完整内容都在一个class属于&34;<div>标签中,且其后每一部电影都在相同的结构中。

接着我们逐步通过查看源代码来进行信息匹配,通过下图可以看到在class&34;div标签中储存了电影排名信息和图片url。

因此我们可以利用正则表达式中的非贪婪匹配依次匹配到每个电影条目中的电影排名和图片url信息,非贪婪匹配即(.*?)的原因在于此页源代码中包含了多部电影。代码如下,第一个(.*?)即为排名,第二个(.*?)为图片url

<divclass=&34;>.*?<emclass=&34;>(.*?)</em>.*?<img.*?src=&34;class=&34;>.*?

依次类推,名称和别名依次在class&34;<span>标签和class&34;<span>标签中,整合上面的正则表达式后代码如下:

<divclass=&34;>.*?<emclass=&34;>(.*?)</em>.*?<img.*?src=&34;class=&34;>.*?\ndivclass=&34;hd&34;title&34;other&34;pic&34;&34;(.*?)&34;&34;info.*?class=&34;.*?class=&34;>(.*?)</span>.*?class=&34;>(.*?)\n</span>.*?<divclass=&34;>.*?<pclass=&34;>(.*?)<br>(.*?)</p>.*?

之后是评分评价人数的标签位置及整合后的正则表达式:

<divclass=&34;>.*?<emclass=&34;>(.*?)</em>.*?<img.*?src=&34;class=&34;>.*?\ndivclass=&34;hd&34;title&34;other&34;bd&34;&34;star.*?<spanclass=&34;></span>.*?spanclass=&34;.*?average&34;inq&34;pic&34;&34;(.*?)&34;&34;info.*?class=&34;.*?class=&34;>(.*?)</span>.*?class=&34;>(.*?)\n</span>.*?<divclass=&34;>.*?<pclass=&34;>(.*?)<br>(.*?)</p>.*?\nclass=&34;(.*?)&34;rating_num&34;>(.*?)</span>.*?<span>(.*?)</span>.*\nspanclass=&34;?>(.*?)</span>

二、爬虫编写

1.网页获取

在进行上面的匹配分析之后我们得到了本文最核心的正则匹配表达式,接下来我们开始尝试写出网页获取的代码。

首先导入相关库,之后将上述豆瓣电影top250的网址存储在url变量中,定义浏览器头,之后调用requests库的get方法获取网页源代码。

importrequests\nimportre\nimportjson\nurl=&34;\nheaders={\n&34;:&34;\n}\nresponse=requests.get(url,headers=headers)\ntext=response.text

2.信息提取

接着将上文的正则表达式存储为字符串,调用re库的findall函数匹配出所有满足条件的子串

regix=&34;pic&34;&34;(.*?)&34;&39;\\\n&34;info.*?class=&34;.*?class=&34;>(.*?)</span>.*?class=&34;>(.*?)&39;</span>.*?<divclass=&34;>.*?<pclass=&34;>(.*?)<br>(.*?)</p>.*?&39;class=&34;(.*?)&34;rating_num&34;>(.*?)</span>.*?<span>(.*?)</span>.*?&39;spanclass=&34;?>(.*?)</span>&39;1&39;https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg&39;肖申克的救赎&39;/月黑高飞(港)/刺激1995(台)&39;\\n导演:弗兰克·德拉邦特FrankDarabont主演:蒂姆·罗宾斯TimRobbins/…&39;\\n1994/美国/犯罪剧情\\n&39;rating5-t&39;9.7&39;1893209人评价&39;希望让人自由。&定义下载图片函数\ndefdown_image(url,name,headers):\nr=requests.get(url,headers=headers)\n?filename=re.search(&39;,url,re.S).group(1)\nwithopen(&34;+name.split(&39;)[0]+&34;,&39;)asf:\nf.write(r.content)

在此基础上我们将上文代码整合为一个网页解析函数,此函数完成了一页中获取网页、提取信息、处理信息和输出信息的功能,此处的yield生成器能够在在一次调用过程中多次返回值,较return有明显的优势。

正则表达式头部([1:排名2:图片][3:名称4:别名][5:导演6:年份/国家/类型][7:评星8:评分9:评价人数][10:评价])\nregix=&34;pic&34;&34;(.*?)&34;&39;\\\n&34;info.*?class=&34;.*?class=&34;>(.*?)</span>.*?class=&34;>(.*?)&39;</span>.*?<divclass=&34;>.*?<pclass=&34;>(.*?)<br>(.*?)</p>.*?&39;class=&34;(.*?)&34;rating_num&34;>(.*?)</span>.*?<span>(.*?)</span>.*?&39;spanclass=&34;?>(.*?)</span>&匹配出所有结果\nres=re.findall(regix,text,re.S)\nforiteminres:\nrank=item[0]\ndown_image(item[1],item[2],headers=headers)\nname=item[2]+&39;+re.sub(&39;,&39;,item[3])\nactor=re.sub(&39;,&39;,item[4].strip())\nyear=item[5].split(&39;)[0].strip(&39;).strip()\ncountry=item[5].split(&39;)[1].strip(&39;).strip()\ntp=item[5].split(&39;)[2].strip(&39;).strip()\ntmp=[iforiinitem[6]ifi.isnumeric()]\niflen(tmp)==1:\nscore=tmp[0]+&39;+item[7]+&39;\nelse:\nscore=tmp[0]+&39;+item[7]+&39;\nrev_num=item[8][:-3]\ninq=item[9]\n39;电影名称&39;导演和演员&39;类型&39;年份&39;国家&39;评分&39;排名&39;评价人数&39;评价&定义输出函数\ndefwrite_movies_file(str):\nwithopen(&39;,&39;,encoding=&39;)asf:\nf.write(json.dumps(str,ensure_ascii=False)+&39;)

4.循环结构

上文仅仅爬取了一页共25条数据,通过点击页面中的下一页对比发现,各页码的url仅仅是start=后面的参数不同,且都是25的倍数。

鉴于此,我们利用循环结构和字符串拼接就可以实现多页爬取:

39;https://movie.douban.com/top250?start=&39;&filter='\nforiteminparse_html(url):\nprint(item)\nwrite_movies_file(item)

最终爬取的封面图片及电影信息结果如下:

三、爬虫总结

至此豆瓣电影top250爬取实战结束~爬虫完整代码可以私信或点击下方扩展链接获得。当然一个爬虫远远不能让笔者和大家熟练,要想举一反三还需要去反复体会案例中的分析思路具体解决途径

因此我们对上述爬虫做一下总结:在爬虫中首先对网页结构robots协议进行分析,得到正则匹配表达式,再利用requests库对目标网页发起请求,再用re库及正则匹配表达式对目标网页源代码进行信息提取,之后利用json库和open函数将图片及提取的信息存储起来,在最再利用循环结构字符串拼接实现翻页爬取。

然而有些网页比如淘宝或者京东我们会发现源代码中无法提取到想要的信息,原因在于这些网站都属于动态加载的网站,而豆瓣电影网站属于静态网页,在后文中将对这些技术进行进一步的讲解。前文涉及的基础知识可参考下面链接:

爬虫所要了解的基础知识,这一篇就够了!Python网络爬虫实战系列

一文带你深入了解并学会Python爬虫库!从此数据不用愁

最新版电影网站源码分享和最新版电影网站源码分享大全的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

站内搜索