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

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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('https://movie.douban.COM/top250',headers=kv)
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.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('https://movie.douban.com/top250?start='+str(page)+'&amp;filter=',headers=kv)
    page=page+25
    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.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.运行结果 (只是一部分)

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

 

二、思路流程

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

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

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

      

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

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

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

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

http://www.gugugu.com/top250?start=0&filter=

http://www.gugugu.com/top250?start=25&filter=

http://www.gugugu.com/top250?start=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('https://movie.douban.com/top250',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('https://movie.douban.com/top250',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('https://movie.douban.com/top250?start='+str(page)+'&filter=',headers=kv)
    page=page+25#以25为页面跨度
    if (r.status_code==200):
        将r.text进行规格化以便遍历
        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)
            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)全部内容,希望文章能够帮你解决Python爬取电影排行TOP250(beautifulsoup+requests)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。