在线电影解析网站源码分享 高清vip电影在线解析网

大家好,如果您还对在线电影解析网站源码分享不太了解,没有关系,今天就由本站为大家分享在线电影解析网站源码分享的知识,包括高清vip电影在线解析网的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

一.requests基本用法

requests模块是用Python语言编写的、基于urllib的第三方库,采用Apache2Licensed开源协议的http库。它比urllib更方便简洁,既可以节约大量的工作,又完全满足http测试需求。requests是一个很实用的Python库,编写爬虫和测试服务器响应数据时经常会用到,使用requests可以轻而易举的完成浏览器相关操作。功能包括:

支持HTTP连接保持和连接池支持使用cookie保持会话支持文件上传支持自动响应内容的编码支持国际化的URL和POST数据自动编码

推荐大家从requests官方网站进行学习,这里只做简单介绍。官方文档地址:

http://docs.python-requests.org/en/master/

更多Python爬虫学习资料可以私信关键字【资料】领取

假设读者已经使用“pipinstallrequests”安装了requests模块,下面讲解该模块的基本用法。

1.导入requests模块

使用语句如下:

importrequests

2.发送请求

requests模块可以发送http常用的两种请求:GET请求和POST请求。其中GET请求可以采用url参数传递数据,它是从服务器上获取数据;而POST请求是向服务器传递数据,该方法更为安全,更多用法请读者下来学习。

下面给出使用GET请求和POST请求获取某个网页的方法,得到一个命名为r的Response对象,通过这个对象获取我们所需的信息。

importrequests\nr=requests.get(&39;)\nr=requests.post(&34;)

其他方法如下:

requests.put(&34;)\nrequests.delete(&34;)\nrequests.head(&34;)\nrequests.options(&34;)

3.传递参数

url通常会传递某种数据,这种数据采用键值对的参数形式置于url中,比如:

http://www.eastmountyxz.com/index.php?key=value

requests通过params关键字设置url参数,以一个字符串字典来提供这些参数。假设作者想传递key1=value1和key2=value2到httpbin.org/get,那么你可以使用如下代码:

importrequests\npayload={&39;:&39;,&39;:&39;}\nr=requests.get(&39;,params=payload)\nprint(r.url)\nprint(r)

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

4.响应内容

requests会自动解码来自服务器的内容,并且大多数Unicode字符集都能被无缝地解码。当请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。

使用语句如下:

importrequests\nr=requests.get(&39;)\nprint(r.text)

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

常用响应内容包括:

r.encoding

获取当前的编码

r.encoding=‘utf-8’

设置编码

r.text

以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码

r.content

以字节形式(二进制)返回。字节方式的响应体,会自动为你解码gzip和deflate压缩

r.headers

以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None

r.status_code

响应状态码

r.raw

返回原始响应体,也就是urllib的response对象,使用r.raw.read()

r.ok

查看r.ok的布尔值便可以知道是否登陆成功

r.json()

Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常

r.raise_for_status()

失败请求(非200响应)抛出异常

post发送json请求:

importrequests\nimportjson\n\nr=requests.post(&39;,\ndata=json.dumps({&39;:&39;}))\nprint(r.json())

5.定制请求头

如果你想为请求添加http头部,只要简单地传递一个字典(dict)给消息头headers参数即可。例如,我们给github网站指定一个消息头,则语句如下:

importrequests\ndata={&39;:&39;}\nheaders={&39;:&39;,\n&39;:&39;}\n\nr=requests.post(&39;,\ndata=data,\nheaders=headers)\nprint(r.text)

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

6.获取状态码和Cookies

r.headers

返回字典类型,头信息

r.requests.headers

返回发送到服务器的头信息

r.status_code

响应状态码

r.cookies

返回cookie

r.history

返回重定向信息,可以在请求是加上allow_redirects=false阻止重定向

具体示例如下:

importrequests\n39;https://github.com/Ranxf&打印解码后的返回数据\nr1=requests.get(url=&39;,\nparams={&39;:&39;})\nprint(r1.url)\nprint(r1.text)

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

同时响应状态码可以结合异常处理,如下:

importrequests\nURL=&39;39;ip&39;8.8.8.8&如果响应状态码不是200,就主动抛出异常\nexceptrequests.RequestExceptionase:\nprint(e)\nelse:\nresult=r.json()\nprint(type(result),result,sep=&39;)

7.超时设置

设置秒数超时,仅对于链接有效。

r=requests.get(&39;,timeout=1)

8.代理设置

proxies={&39;:&39;,&39;:&39;}\nrequests.get(&39;,proxies=proxies)

本小节只是简单介绍了requests模块,推荐读者下来结合案例和官方网站进行更深入的学习和操作。

二.豆瓣网页DOM树分析

1.网页源码分析

豆瓣(Douban)是一个社区网站,创立于2005年3月6日。该网站以书影音起家,提供关于书籍、电影、音乐等作品的信息,其作品描述和评论都是由用户提供,是Web2.0网站中具有特色的一个网站。

当我们拿到一个网页的时候,第一步并不是去测试它能否能使用requests简单请求到html,而是要去选择合适的方法进行爬取该网页,弄明白它数据的加载方式,才可以让我们的事半功倍,选择一个好的请求方法也可以提升我们爬虫程序的效率。

本文主要介绍爬取豆瓣电影排名前250名的电影信息。地址为:

https://movie.douban.com/top250?format=text

右键审查元素显示HTML源代码,如下图所示。

更多Python爬虫学习资料可以私信关键字【资料】领取

对应的HTML部分代码如下:

<li><divclass=&34;>\n<divclass=&34;>\n<emclass=&34;>1</em>\n<ahref=&34;>\n<imgalt=&34;src=&34;>\n</a>\n</div>\n<divclass=&34;>…</div>\n</div></li>

2.网页结构分析(翻页)

网站翻页是网络爬虫中至关重要的一环,我们进入豆瓣电影Top250,查看它的网页结构。点击“下一页”,查看它的URL链接,会发现下面的规律:

第1页URL:https://movie.douban.com/top250?start=0&filter=\n第2页URL:https://movie.douban.com/top250?start=25&filter=\n第3页URL:https://movie.douban.com/top250?start=50&filter=\n…\n第10页URL:https://movie.douban.com/top250?start=225&filter=

它是存在一定规律的,top250?start=25表示获取第2页(序号为26到50号)的电影信息;top250?start=50表示获取第3页(序号为51到75号)的电影信息,依次类推。

方法一

我们结合数学公式写一个循环获取完整的250部电影信息。核心代码如下:

i=0\nwhilei<10:\nnum=i*2539;https://movie.douban.com/top250?start=&39;&filter=&爬虫电影信息\ni=i+1

方法二

需要写一个for循环,生成从0到225的数字即可,从上面的链接可以看出来,它的间隔为25,forpageinrange(0,226,25)必须要取超过停止数据225,因为255不包含在其中,25是它的公差,程序表示为:

更多Python爬虫学习资料可以私信关键字【资料】领取

接下来使用python的requests库去代替浏览器请求网页的服务器,返回HTML文件,提取并保存信息,再生成下一页的链接,继续上面请求服务器的操作爬取信息。

三.Requests请求服务器

在向服务器发出请求时,我们先选择第一个链接来进行测试,完成本页所有内容的获取,然后再获取所有页面的信息。

1.导入包

如果没有安转requests,可以使用pip直接安转步骤:win+r运行——>cmd——>pipinstallrequests

2.设置浏览器代理

网页点击右键,打开检查,选择Network,All刷新网页,选择第一个文件,双击,选择headers

更多Python爬虫学习资料可以私信关键字【资料】领取

设置的浏览器代理必须为字典型,如:

headers={\n&39;:&39;\n}

3.请求服务器格式

请求源代码向服务器发出请求,200代表成功。如果在后面加上.text表示输出文本内容。

url是用一个链接headers是用来做浏览器代理的内容

requests.get(url=url,headers=headers)

4.请求服务器代码汇总

这里以第一页内容为例,核心代码如下所示:

importrequests\n39;User-Agent&39;Mozilla/5.0(WindowsNT10.0;Win64;x64)\\\nAppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36&39;https://movie.douban.com/top250?start=0&filter=&向服务器发出请求\nr=requests.get(url=url,headers=headers)\nprint(r.text)

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

四.xpath提取信息

1.获取xpath节点方法

xpath是按照HTML标签的方式进行定位的,谷歌浏览器自带有xpath,可以直接复制过来使用,简单方便,运行速度快。输出结果为:

//*[@id=“content”]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]

更多Python爬虫学习资料可以私信关键字【资料】领取

我们使用xpath时,也必须先对网页进行lxml库中的etree解析,把它变为特有的树状形式,才能通过它进行节点定位。

fromlxmlimportetree树状结构解析

2.xpath提取文本

当我们提取标签内的文本时,需要在复制到的xpath后面加上/text(),告诉它我们需要提取的内容是一个标签呈现的数据,如《肖申克的救赎》。

<spanclass=&34;>肖申克的救赎</span>

结合xpath所提取的文字代码为:

By:Eastmount2021-02-25\nimportrequests\nfromlxmlimportetree\n39;User-Agent&39;Mozilla/5.0(WindowsNT10.0;Win64;x64)\\\nAppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36&39;https://movie.douban.com/top250?start=0&filter=&向服务器发出请求\nr=requests.get(url=url,headers=headers).text\n39;//*[@id=&34;]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()&34;这是数组形式:&34;这是字符串形式:&39;肖申克的救赎&34;&34;&34;content&39;//*[@id=&34;]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href&34;这是数组形式:&34;这是字符串形式:&39;https://movie.douban.com/subject/1292052/&34;&39;//*[@id=&34;]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class&34;这是数组形式:&34;这是字符串形式:&39;rating5-t&34;rating5-t&39;rating(.*?)-t&39;5&34;1059232人评价&39;\\D&34;&34;这里的数字是:&-*-coding:utf-8-*-\nimportcsv\nc=open(&34;,&34;,encoding=&34;,newline=&39;)39;序号&39;姓名&39;年龄&34;1&34;小明&34;10&清空\ntlist.append(&34;)\ntlist.append(&34;)\ntlist.append(&34;)\nwriter.writerow(tlist)\nprint(tlist,type(tlist))\n\nc.close()

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

2.CSV文件读

基本流程如下:

导入CSV模块创建一个CSV文件对象读取CSV文件关闭文件

34;test-01.csv&34;r&34;utf8&读文件\nreader=csv.reader(c)\nforlineinreader:\nprint(line[0],line[1],line[2])\nc.close()

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

在文件操作中编码问题是最让人头疼的,尤其Python2的时候。但只需要环境编码一致,注意相关转换也能有效解决,而Python3文件读写操作写清楚encoding编码方式就能正常显示。

七.完整代码

1.提取本页所有信息

通过前面的xpath只能提取到一条信息,如果我们要提取所有的信息,写一个for循环把它遍历出来即可。先复制几个电影名字的xpath,如前三个的:

更多Python爬虫学习资料可以私信关键字【资料】领取

li标签前的作为父级,后面的为子集,./代替父级的位置,改写为:

li=html_etree.xpath(&34;content&39;)\nforiteminli:\nname=item.xpath(&39;)[0]\nprint(name)

此时的代码如下所示:

By:Eastmount&ayouleyang2021-02-25\nimportrequests\nfromlxmlimportetree\n39;User-Agent&39;Mozilla/5.0(WindowsNT10.0;Win64;x64)\\\nAppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36&39;https://movie.douban.com/top250?start=0&filter=&向服务器发出请求\nr=requests.get(url=url,headers=headers).text\n39;//*[@id=&34;]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()&34;这是数组形式:&34;这是字符串形式:&提取链接\nmovie_url=html_etree.xpath(&34;content&39;)\nprint(&34;,movie_url)\nprint(&34;,movie_url[0])\n39;//*[@id=&34;]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class&34;这是数组形式:&34;这是字符串形式:&提取本页所有电影名\nli=html_etree.xpath(&34;content&39;)\nforiteminli:\nname=item.xpath(&39;)[0]\nprint(name)

输出结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

2.最终代码

最终代码如下所示:

By:Eastmount&ayouleyang2021-02-25\nimportrequests\nfromlxmlimportetree\nimportcsv,re\n39;User-Agent&39;Mozilla/5.0(WindowsNT10.0;Win64;x64)\\\nAppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.149Safari/537.36&创建文件夹并打开\nfp=open(&34;,&39;,newline=&39;,encoding=&39;)\nwriter=csv.writer(fp)39;排名&39;名称&39;链接&39;星级&39;评分&39;评价人数&循环遍历TOP250的URL\nforpageinrange(0,226,25):34;正在获取第%s页&39;https://movie.douban.com/top250?start=%s&filter=&请求源代码\nreponse=requests.get(url=url,headers=headers).text\n\n定位节点注意迭代xpath应用\nli=html_etree.xpath(&34;content&39;)\nforiteminli:\n39;./div/div[1]/em/text()&电影名称\nname=item.xpath(&39;)[0]\n39;./div/div[2]/div[1]/a/@href&评分正则表达式提取\nrating=item.xpath(&39;)[0]\nrating=re.findall(&39;,rating)[0]\niflen(rating)==2:\nstar=int(rating)/10评价人数\nrating_num=item.xpath(&39;)[0]\ncontent=item.xpath(&39;)[0]\ncontent=re.sub(r&39;,&34;,content)\n写入内容\nwriter.writerow((rank,name,dy_url,star,rating_num,content))\nfp.close()

运行结果如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

最终保存的文件如下图所示:

更多Python爬虫学习资料可以私信关键字【资料】领取

八.总结

在学习网络爬虫之前,读者首先要掌握分析网页节点、审查元素定位标签,甚至是翻页跳转、URL分析等知识,然后才是通过Python、Java或C#实现爬虫的代码。本文作者结合自己多年的网络爬虫开发经验,深入讲解了Requests技术网页分析并爬取了豆瓣电影信息,读者可以借用本章的分析方法,结合Requests库爬取所需的网页信息,并学会分析网页跳转,尽可能爬取完整的数据集。

该系列所有代码下载地址:

https://github.com/eastmountyxz/Python-zero2one

最后

更多参考精彩博文请看这里:@林夕编程\u0002喜欢小编的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

————————————————

版权声明:本文为CSDN博主「Eastmount」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Eastmount/article/details/113830604

关于在线电影解析网站源码分享到此分享完毕,希望能帮助到您。

Published by

风君子

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