B站关注列表的Python爬取方法

您所在的位置:网站首页 b站怎么大量取关up主关注 B站关注列表的Python爬取方法

B站关注列表的Python爬取方法

#B站关注列表的Python爬取方法| 来源: 网络整理| 查看: 265

一、数据库的设计与操作 1、数据的分析

B站的关注列表在 此处 中,一页最多50条信息。 我们大致分析一下信息, 首先,列表内容存在 data: 中,如下:

data: [ { "uid": "27676288", "name": "一个阳光沙雕 UP 主", "fans": "6.9w", "video_view": "1.3亿", "article_view": "8.3w", "attention": "53", "official_verify": { "type": -1, "desc": "" } }, ... ]

由此,可知每一个关注的人的信息都存储在一个列表中,而每个关注的人的信息都有 uid, name, fans, video_view, article_view 和 attention 等字段。

2、数据库的设计

根据以上分析,我们可以设计一个数据库来存储这些信息。数据库的表结构如下:

CREATE TABLE bilibili_follows ( uid INT NOT NULL, name VARCHAR(255) NOT NULL, fans VARCHAR(255) NOT NULL, video_view VARCHAR(255) NOT NULL, article_view VARCHAR(255) NOT NULL, attention VARCHAR(255) NOT NULL, official_verify VARCHAR(255) NOT NULL, PRIMARY KEY (uid) ); 3、数据的插入

我们可以使用 Python 的 pymysql 库来将数据插入到数据库中。以下是一个示例代码:

import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='bilibili') # 创建游标 cursor = conn.cursor() # 准备 SQL 语句 sql = """ INSERT INTO bilibili_follows (uid, name, fans, video_view, article_view, attention, official_verify) VALUES (%s, %s, %s, %s, %s, %s, %s) """ # 遍历数据列表 for follow in data: # 将数据插入到数据库中 cursor.execute(sql, (follow['uid'], follow['name'], follow['fans'], follow['video_view'], follow['article_view'], follow['attention'], follow['official_verify'])) # 提交事务 conn.commit() # 关闭游标和连接 cursor.close() conn.close() 二、数据的抓取 1、使用 BeautifulSoup

我们可以使用 BeautifulSoup 库来抓取 B 站关注列表的数据。以下是一个示例代码:

import requests from bs4 import BeautifulSoup # 请求 B 站关注列表页面 response = requests.get('https://space.bilibili.com/follow/Followed') # 解析 HTML 文档 soup = BeautifulSoup(response.text, 'html.parser') # 查找关注的人的信息 follows = soup.find_all('li', class_='item') # 提取数据 data = [] for follow in follows: uid = follow.find('a')['href'].split('/')[-1] name = follow.find('a').text fans = follow.find('span', class_='fans').text video_view = follow.find('span', class_='video-view').text article_view = follow.find('span', class_='article-view').text attention = follow.find('span', class_='attention').text official_verify = follow.find('span', class_='official-verify') if official_verify: official_verify = official_verify.text else: official_verify = '' data.append({ 'uid': uid, 'name': name, 'fans': fans, 'video_view': video_view, 'article_view': article_view, 'attention': attention, 'official_verify': official_verify }) # 打印数据 print(data) 2、使用 Scrapy

我们也可以使用 Scrapy 来抓取 B 站关注列表的数据。以下是一个示例代码:

import scrapy class BilibiliFollowsSpider(scrapy.Spider): name = 'bilibili_follows' allowed_domains = ['bilibili.com'] start_urls = ['https://space.bilibili.com/follow/Followed'] def parse(self, response): # 查找关注的人的信息 follows = response.xpath('//li[@class="item"]') # 提取数据 for follow in follows: uid = follow.xpath('@data-id').extract_first() name = follow.xpath('.//a[@class="name"]/text()').extract_first() fans = follow.xpath('.//span[@class="fans"]/text()').extract_first() video_view = follow.xpath('.//span[@class="video-view"]/text()').extract_first() article_view = follow.xpath('.//span[@class="article-view"]/text()').extract_first() attention = follow.xpath('.//span[@class="attention"]/text()').extract_first() official_verify = follow.xpath('.//span[@class="official-verify"]/text()').extract_first() yield { 'uid': uid, 'name': name, 'fans': fans, 'video_view': video_view, 'article_view': article_view, 'attention': attention, 'official_verify': official_verify } # 运行爬虫 scrapy crawl bilibili_follows 3、使用 Selenium

我们还可以使用 Selenium 来抓取 B 站关注列表的数据。以下是一个示例代码:

from selenium import webdriver from selenium.webdriver.common.by import By # 创建 Selenium 驱动器 driver = webdriver.Chrome() # 访问 B 站关注列表页面 driver.get('https://space.bilibili.com/follow/Followed') # 等待页面加载完成 driver.implicitly_wait(10) # 查找关注的人的信息 follows = driver.find_elements(By.XPATH, '//li[@class="item"]') # 提取数据 data = [] for follow in follows: uid = follow.get_attribute('data-id') name = follow.find_element(By.XPATH, './/a[@class="name"]').text fans = follow.find_element(By.XPATH, './/span[@class="fans"]').text video_view = follow.find_element(By.XPATH, './/span[@class="video-view"]').text article_view = follow.find_element(By.XPATH, './/span[@class="article-view"]').text attention = follow.find_element(By.XPATH, './/span[@class="attention"]').text official_verify = follow.find_element(By.XPATH, './/span[@class="official-verify"]').text data.append({ 'uid': uid, 'name': name, 'fans': fans, 'video_view': video_view, 'article_view': article_view, 'attention': attention, 'official_verify': official_verify }) # 关闭 Selenium 驱动器 driver.quit() # 打印数据 print(data) 三、数据的分析 1、使用 Pandas

我们可以使用 Pandas 库来分析 B 站关注列表的数据。以下是一个示例代码:

import pandas as pd # 读取数据 data = pd.read_csv('bilibili_follows.csv') # 查看数据信息 print(data.info()) # 查看数据概况 print(data.describe()) # 分组统计 data = data.groupby('name').agg({ 'fans': 'sum', 'video_view': 'sum', 'article_view': 'sum', 'attention': 'sum' }) # 排序 data = data.sort_values('fans', ascending=False) # 打印数据 print(data) 四、结语

本文介绍了如何使用 Python 爬取 B 站关注列表



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3