影视自动采集影视网站源码分享(影视源码自动采集不用数据库)

大家好,今天来为大家分享影视自动采集影视网站源码分享的一些知识点,和影视源码自动采集不用数据库的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

实现目标

本案计划实现:通过网络请求,获取豆瓣电影TOP250的数据,并存储到Json文件中。

案例应用技巧:

GET请求(requests):headers翻页网页解析(BeautifulSoup)

实现过程

总体来说,简单的单线程爬虫的实现流程如下:

确定数据所在的Url,以及控制翻页的参数执行网页请求并解决请求中出现的问题解析网页,获取格式化数据实现翻页存储数据

下面我们按着以上步骤来依次完成。

确定数据所在Url

在Chrome浏览器中打开豆瓣电影TOP250,其Url为:https://movie.douban.com/top250。

通过观察,可以发现目标数据是存在于网页源代码中的,直接请求网页Url即可获得。

同时,第1页仅显示了25部电影,说明我们需要请求10次不同的页面才能完成所有250部电影的抓取。于是我们在页面上点击打开第2页,发现第2页的Url是:

https://movie.douban.com/top250?start=25&filter=

相较于第1页的Url,第2页增加了start参数和filter参数,因为filter参数内容为空值,很可能是用来”我没看过的“选项的筛选的,因此start参数应该是实际起作用的。因为第1页有25个电影,而第2页的start参数为25,说明start很可能是指当前页面是从第多少部电影开始显示的。

为了检验这个结果,我们使用浏览器打开start参数值为0的页面,果然正确地打开了第1页。因此,我们只需要修改start参数就可以有效地实现翻页了。

网页请求

下面我们开始尝试使用Python实现请求,在这个过程中,建议大家使用IDLE或PyCharm的PythonConsole模式来进行测试,减少网站的实际请求次数,以减少对目标网站的影响,以免被IP封锁。

我们先以第1页为例进行尝试,发现直接使用requests的请求并不能获得数据,说明我们的请求被拒绝了。因此,我们可以打开Chrome控制台中访问页面时的请求,选择headers选项卡,查看其中的RequestHeaders,并依据这个headers来伪装我们的请求。实现代码如下:

importrequests\n?\nheaders={\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n&34;:&34;,\n}\n?\nresponse=requests.get(&34;,headers=headers)\n?\nprint(response.content.decode(errors=&34;))

暂时先不要在headers中添加“Accept-Encoding”,否则请求结果可能会被压缩,影响解析。

在打印出的内容中,我们通过搜索可以找到我们需要的数据。

网页解析

下面,我们使用CSS选择器将电影的各类信息解析出来(先定位到每个电影的标签,再定位到各类信息的标签,最后将各类信息从标签中提取出来)。在解析过程中,我们要随时考虑到我们当前解析的标签可能不存在,并努力避免因标签不存在而报错。实现代码如下:

frombs4importBeautifulSoup\n?\nbs=BeautifulSoup(response.content.decode(errors=&34;),&39;)\nformovie_labelinbs.select(&content>div>div.article>ol>li&定位到电影标签\nurl=movie_label.select_one(&34;)[&34;]34;li>div>div.info>div.hd>a&获取标题行内容\ninfo_text=movie_label.select_one(&34;).text34;li>div>div.info>div.bd>div>span.rating_num&获取评分\nrating_people=movie_label.select_one(&34;).text34;li>div>div.info>div.bd>p.quote&获取评价\nprint(url,title_text,info_text,rating_num,rating_people,quote)

通过以上代码,我们成功地将各部分的数据都解析出来了,但是解析出的标题行内容、说明部分内容、评分、评分人数和评价中格式相对混乱,包括很多不需要的内容,需要进一步的清洗。

解析、清洗标题行:

title_text=movie_label.select_one(&34;).text.replace(&34;,&34;)34;/&提取中文标题+清除前后空格\ntitle_other=[clear_space_in_polar(title)fortitleintitle_text.split(&34;)[1:]]34;li>div>div.info>div.bd>p:nth-child(1)&获取说明部分内容\ninfo_text=re.sub(&34;,&34;,info_text)34;^\\n&34;&清除开头的空行\ninfo_line_1=info_text.split(&34;)[0]34;\\n&获取第2行内容信息:包括年份、国家和类型\ndirector=re.sub(&34;,&34;,info_line_1)34;[0-9]+&34;/&提取电影年份并转换为数字\ncountry=clear_polar_space(info_line_2.split(&34;)[1])iflen(info_line_2.split(&34;))>=2elseNone34;/&34;/&提取电影类型\nclassify=re.split(&34;,classify)解析评分\nrating_num=movie_label.select_one(&34;).text34;[0-9.]+&将评分转换为浮点型数字\n?\n34;li>div>div.info>div.bd>div>span:nth-child(4)&提取评分人数\nrating_people=int(re.search(&34;,rating_people).group())解析评价(该标签可能会不存在)\nifquote_label:=movie_label.select_one(&34;):\nquote=quote_label.text.replace(&34;,&34;)34;title&34;chinese&34;others&34;director&34;year&34;country&34;classify&34;rating&34;num&34;people&34;quote&34;https://movie.douban.com/top250?start={0}&filter=&34;豆瓣TOP250电影.json&34;w+&34;UTF-8&34;data”:movie_list},ensure_ascii=False))

本系列案例采集的一切数据仅可用于学习、研究用途!

关于影视自动采集影视网站源码分享到此分享完毕,希望能帮助到您。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平