Python爬取电影排行TOP250(beautifulsoup+requests)

编程入门 行业动态 更新时间:2024-10-23 03:27:58

Python爬取<a href=https://www.elefans.com/category/jswz/34/1716909.html style=电影排行TOP250(beautifulsoup+requests)"/>

Python爬取电影排行TOP250(beautifulsoup+requests)

前言:

       网络爬虫无疑会为我们生活带来便利,但是过度的恶意爬取也会造成服务器的负担,这里还是请诸位利用好这把爬虫双刃剑。

目录

一、话不多说,先看代码,随后详谈

        1.代码如下:

 (1)单个网页爬取              

   (2)多个网页

2.运行结果 (只是一部分)

二、思路流程

1.正所谓巧妇难为无米之炊,我们要爬取信息得要源代码才行。可以用requests解决。

2.分析源代码,找到包含信息的标签,用beautifulsoup遍历找到。

3.利用beautifulsoup通过标签名字和属性遍历标签,查找到信息。

4.观察网址信息,制作出爬取多个网页的循环,比如说网址的后半段的某些数字的间隔是有规律的,如下所示

二、代码解释 

1.代码库的解释

2.代码段的解释

(1)requests代码段的解释

(2)beautifulsoup代码段的解释

(3)整个代码段的解释

 三、总结


一、话不多说,先看代码,随后详谈

 1.代码如下:

(1)单个网页爬取              

import requests
from bs4 import BeautifulSoup
kv={'user-agent':'Mozilla/5.0'}
r=requests.get('',headers=kv)
if (r.status_code==200):source=r.textsoup = BeautifulSoup(source,'html.parser')items=soup.find_all('div','item')for i in items:for j in range(len(i.find_all('span','title'))):print(i.find_all('span','title')[j].string,end='')print(i.find_all('span','other')[0].string)print(i.find_all('p')[0].text.replace('\n','').replace(' ',''))if(len(i.find_all('span','inq'))!=0):print('评语:'+i.find_all('span','inq')[0].string)print('评分:'+i.find_all(property="v:average")[0].string)print("\n")
else:print("哦豁~目标网站不给予响应")

(2)多个网页

import requests
from bs4 import BeautifulSoup
kv={'user-agent':'Mozilla/5.0'}
page=0
while (page<=250):r=requests.get('='+str(page)+'&filter=',headers=kv)page=page+25if (r.status_code==200):source=r.textsoup = BeautifulSoup(source,'html.parser')items=soup.find_all('div','item')for i in items:for j in range(len(i.find_all('span','title'))):print(i.find_all('span','title')[j].string,end='')print(i.find_all('span','other')[0].string)print(i.find_all('p')[0].text.replace('\n','').replace(' ',''))if(len(i.find_all('span','inq'))!=0):print('评语:'+i.find_all('span','inq')[0].string)print('评分:'+i.find_all(property="v:average")[0].string)print("\n")else:print("哦豁~目标网站不给予响应")
print('OVER~')

2.运行结果 (只是一部分)

二、思路流程

1.正所谓巧妇难为无米之炊,我们要爬取信息得要源代码才行。可以用requests解决。

2.分析源代码,找到包含信息的标签,用beautifulsoup遍历找到。

        比如我们此次要爬取的电影都在items标签中,所有的电影名字都在title标签中,导演在p标签中等等,都是需要我们需要留心的。

      

3.利用beautifulsoup通过标签名字和属性遍历标签,查找到信息。

        这里用到了beautifulsoup的find_all利用标签名字和属性遍历,标签的.string和.text属性进行字符提取输出。这里的string和text有所不同,string只能读取含有一个字标签的标签字符,而text可以读取含有多个字标签的所有字符。

4.观察网址信息,制作出爬取多个网页的循环,比如说网址的后半段的某些数字的间隔是有规律的,如下所示:

=0&filter=

=25&filter=

=50&filter=

二、代码解释 

1.代码库的解释

        代码所需要的是reuqests和beautifulsoup的库,request的功能是访问网站并返回响应信息和网站的源代码,而beautifulsoup的功能是将源代码规范化以便查找其中的对应的信息。简单来说就是我们爬取到信息就好比要喝一碗汤,喝到汤就需要原料并且将其烹饪,requests为我们提供原料,beautifulsoup为我们烹饪,在烹饪后的美味汤中我们得以取到有价值的信息。

2.代码段的解释

(1)requests代码段的解释

#引入库
import requests
from bs4 import BeautifulSoup
#首先我们要进行伪造,将user-agent改成浏览器的,很多网站对python默认的user-agent很敏感,不改是大概率行不通的
#要是还行不通大家就改一下一下requests的其他post属性吧
kv={'user-agent':'Mozilla/5.0'}
#开始请求响应,并将响应的信息赋予给r
r=requests.get('',headers=kv)
#如果响应为200,便证明我们的响应成功,要是其他数字,那就自求多福咯~有兴趣的伙伴可以去网上查HTTP协议,里面有关于响应代码的详解
if (r.status_code==200):
#下面不必看,我稍后在解释!下面不必看,我稍后在解释!下面不必看,我稍后在解释!
#    source=r.text
#    soup = BeautifulSoup(source,'html.parser')
#    items=soup.find_all('div','item')
#    for i in items:
#        for j in range(len(i.find_all('span','title'))):
#            print(i.find_all('span','title')[j].string,end='')
#        print(i.find_all('span','other')[0].string)
#        print(i.find_all('p')[0].text)
#        print('评语:'+i.find_all('span','inq')[0].string)
#        print('评分:'+i.find_all(property="v:average")[0].string)
#    print("\n")
#上面不必看,我稍后在解释!上面不必看,我稍后在解释!上面不必看,我稍后在解释!
else:#其他响应表明服务器可能有些不太乐意回应你print("哦豁~目标网站不给予响应")

(2)beautifulsoup代码段的解释

#import requests
#from bs4 import BeautifulSoup
#kv={'user-agent':'Mozilla/5.0'}
#r=requests.get('',headers=kv)
#现在咱们介绍响应成功的情况
if (r.status_code==200):#既然响应成功,就说明r已经得到了响应的信息,这里我们将信息中的源代码(r.text)赋予给source,以它为原料进行煲汤source=r.text#将源代码依照html.parser方法进行规格化soup = BeautifulSoup(source,'html.parser')#用find_all方法到信息所在标签,并以列表形式返回。#这里的items包含着当前网页的电影项。items=soup.find_all('div','item')#用i遍历items中每一项电影for i in items:#电影的标题for j in range(len(i.find_all('span','title'))):print(i.find_all('span','title')[j].string,end='')#电影的其他信息print(i.find_all('span','other')[0].string)#text不管标签中有多少子标签都会输出全部字符#但是string在包含有多个标签的时候会不知所措,返回空值print(i.find_all('p')[0].text)#电影的引言if(len(i.find_all('span','inq'))!=0):#防止有的电影没有引言print('评语:'+i.find_all('span','inq')[0].string)#电影的评分print('评分:'+i.find_all(property="v:average")[0].string)print("\n")
#else:print("哦豁~目标网站不给予响应")

 (3)整个代码段的解释

import requests
from bs4 import BeautifulSoup
#改变请求代理为浏览器。
kv={'user-agent':'Mozilla/5.0'}
page=0#网页起始页数
while (page<=250):#遍历多个网页r=requests.get('='+str(page)+'&filter=',headers=kv)page=page+25#以25为页面跨度if (r.status_code==200):source=r.textsoup = BeautifulSoup(source,'html.parser')#将r.text进行html规格化以便遍历#开始遍历所有电影items=soup.find_all('div','item')#在每一个电影中搜查信息for i in items:for j in range(len(i.find_all('span','title'))):print(i.find_all('span','title')[j].string,end='')print(i.find_all('span','other')[0].string)print(i.find_all('p')[0].text)if(len(i.find_all('span','inq'))!=0):#电影没引言就跳过print('评语:'+i.find_all('span','inq')[0].string)print('评分:'+i.find_all(property="v:average")[0].string)print("\n")else:print("哦豁~目标网站不给予响应")
print('OVER~')

 三、总结

        爬多了也会对服务器造成负担的,大家实验一下就好,不宜多爬,文章写的啰嗦了,而且代码的输出不够美观,还请各位就一笑而过吧,有错误的话怼我就成~

        

更多推荐

Python爬取电影排行TOP250(beautifulsoup+requests)

本文发布于:2024-03-07 05:00:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716908.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:电影排行   Python   requests   beautifulsoup

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!