网页视频抓取脚本(,链接等内容并存储csv文件中更新时间:2022年)

优采云 发布时间: 2022-01-12 10:20

  网页视频抓取脚本(,链接等内容并存储csv文件中更新时间:2022年)

  Python爬取bilibili网页排名、视频、浏览量、点赞、链接等,并存储在csv文件中

  更新时间:2022-01-04 10:24:57 作者:小木_。

  本篇文章主要介绍python爬取bilibili网页排名、视频、浏览量、点赞、链接等内容,并存储在csv文件中。首先,你必须了解html标签。标签是主要的和次要的。现在,主标签是根标签,也是所有要爬取的标签的组合。需要的朋友可以参考

  首先,我们需要了解html标签。有主要标签和次要标签。一般理解,主标签是根标签和所有要爬取的标签的组合。

  

  先明白后面会用到code属性:

  #获取属性

a.attrs  获取a所有的属性和属性值,返回一个字典

a.attrs['href']   获取href属性

a['href']   也可简写为这种形式

 

#获取内容

a.string      获取a标签的直系文本

注意:如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容

a.text     这是属性,获取a子类的所有文本

a.get_text()  这是方法,获取a标签子类的所有文本

 

#find   主要用于找到第一个符合要求的标签

a.find('a')              找到第一个符合要求的

a.find('a', title="xxx") 具有title=a属性的

a.find('a', alt="xxx")

a.find('a', class_="xxx")

a.find('a', id="xxx")

 

#find_all  用于找到所有符合要求的标签

a.find_all('a')

a.find_all(['a','b']) 找到所有的a和b标签

a.find_all('a', limit=2)  限制前两个

 

#根据选择器选择指定的内容

a.select('#feng')

  我们今天要爬的是bilibili网站,主要是作为一个练习,并没有什么大的作用。爬取的内容是:

  排名、视频名称、视频集数、观看次数、点赞数和视频链接,爬取后保存在csv文件中

  

  直接上代码:

  # -*- coding: utf-8 -*-

import requests

from bs4 import BeautifulSoup

 

r = requests.get('https://www.bilibili.com/v/popular/rank/guochan')   #要爬取的网站链接

html = r.content

soup = BeautifulSoup(html,'html.parser')    #html.parser是解析器

div_people_list = soup.find('div', attrs={'class': 'rank-list-wrap'})

div_people_list_list = div_people_list.find('ul', attrs={'class': 'rank-list pgc-list'})

a_s = div_people_list.find_all('li', attrs={'class': 'rank-item'})

for a in a_s:    #排名

    for b in a.find_all('div', attrs={'class': 'info'}):

        for c in b.find_all('a', attrs={'target': '_blank'}):     #名称及链接

            for d in b.find('span', attrs={'class': 'data-box'}):   #获取视频集

                for e in b.find_all('span', attrs={'class': 'data-box'})[1:][:1]:  #循环播放数

                    for f in b.find_all('span', attrs={'class': 'data-box'})[2:][:2]:  # 循环点赞量

                        web = a['data-rank']  # 排名

 

                        name = c.string  # 名称

 

                        name_2 = d.string  # 全集

                        name_2_1 = name_2.replace(" ", "").replace("\t", "").strip()  # 去除多余空格

 

                        name_3 = e.get_text()  # 播放量

                        data_1 = name_3.replace(" ", "").replace("\n", "").replace("\t", "")

 

                        name_4 = f.get_text()  # 点赞量

                        data_2 = name_4.replace(" ", "").replace("\n", "").replace("\t", "")

 

                        url = c['href']  # 链接

                        print(web + '\t' + name + '\t\t\t' + name_2_1 + '\t\t\t\t' + data_1 + '\t\t\t\t'+ data_2+'\t\t\t\t' + f'http:{url}')

  效果如下:

  

  其实我在做爬虫的时候遇到了很多错误,就是html中的标签重复了,需要用[1:][:1]来选择标签。有时并不难,但项目做的少。

  现在让我们添加这段代码来保存爬取的内容:

  import csv

f = open('爬取文件.csv','w',encoding='gbk',newline='')  #写入文件

#基于文件对象构建 csv写入对象

csv_writer = csv.writer(f)

csv_writer.writerow(['排行','影片', '篇集','播放量','点赞量','视频链接'])

csv_writer.writerow([web, name, n,d,g,f'http:{url}'])

  可以看到内容是保存在csv文件中的,不是很乱,比刚才dos窗口里的好多了

  

  完整代码如下:

  # -*- coding: utf-8 -*-

import requests

from bs4 import BeautifulSoup

import csv

 

f = open('爬取文件.csv','w',encoding='gbk',newline='')  #写入文件

#基于文件对象构建 csv写入对象

csv_writer = csv.writer(f)

csv_writer.writerow(['排行','影片', '篇集','播放量','点赞量','视频链接'])

 

r = requests.get('https://www.bilibili.com/v/popular/rank/guochan')   #要爬取的网站链接

html = r.content

soup = BeautifulSoup(html,'html.parser')    #html.parser是解析器

div_people_list = soup.find('div', attrs={'class': 'rank-list-wrap'})

div_people_list_list = div_people_list.find('ul', attrs={'class': 'rank-list pgc-list'})

 

a_s = div_people_list.find_all('li', attrs={'class': 'rank-item'})

#a_s_2 = a_s.find_all('div', attrs={'class': 'info'})

for a in a_s:    #排名

    for b in a.find_all('div', attrs={'class': 'info'}):

        for c in b.find_all('a', attrs={'target': '_blank'}):     #名称及链接

            for d in b.find('span', attrs={'class': 'data-box'}):   #获取视频集

                for e in b.find_all('span', attrs={'class': 'data-box'})[1:][:1]:  #循环播放数

                    for f in b.find_all('span', attrs={'class': 'data-box'})[2:][:2]:  # 循环点赞量

                        web = a['data-rank']  # 排名

 

                        name = c.string  # 名称

 

                        name_2 = d.string  # 全集

                        name_2_1 = name_2.replace(" ", "").replace("\t", "").strip()  # 去除多余空格

 

                        name_3 = e.get_text()  # 播放量

                        data_1 = name_3.replace(" ", "").replace("\n", "").replace("\t", "")

 

                        name_4 = f.get_text()  # 点赞量

                        data_2 = name_4.replace(" ", "").replace("\n", "").replace("\t", "")

 

                        url = c['href']  # 链接

 

 

                        n = name_2.replace(" ", "").replace("\t", "").strip()  # 去除多余空格

 

                        d = name_3.replace(" ", "").replace("\t", "")

 

                        g = name_4.replace(" ", "").replace("\t", "")

                        #构建列表头

                        csv_writer.writerow([web, name, n,d,g,f'http:{url}'])

  至此,这篇关于python爬取bilibili网页排名、视频、浏览量、点赞、链接等内容并将文章存入csv文件的文章就介绍到这里了,更多相关python爬取bilibili内容并将内容存储在csv文件,请搜索脚本首页之前的文章或继续浏览下方的相关文章。希望大家以后多多支持脚本之家!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线