python抓取网页数据(如何养搬运B站弹幕的“虫”?解析)
优采云 发布时间: 2022-02-09 15:14python抓取网页数据(如何养搬运B站弹幕的“虫”?解析)
python爬虫抓取弹幕的实现方法一、什么是爬虫?
百度百科是这样说的:一个自动获取网页内容的程序。据我了解,爬虫是~~“在网上爬行……”闭嘴!~~
那么我们来看看B站携带弹幕的“虫子”是怎么养的
二、投喂步骤1.请求弹幕
首先你要知道爬取的网站url是什么。对于B站的弹幕,弹幕的位置有固定的格式:
+cid+.xml
好的,所以问题是,cid 是什么?不管它是什么,我会告诉你如何获得它。
1.打开视频后,点击F12,切换到“网络”,在过滤器中填写“cid”进行过滤。
2.点击过滤后的网络信息,找到右侧Payload处的cid
3.至此,我们知道了何氏视频弹幕的网络链接:
4.接下来就是发送网络请求,获取网页资源。Python 有许多用于发送网络请求的库。例如:
我们使用 reaquests 库来演示
发送请求的代码如下
(例子):
#【何同学】我用108天开了个灯......视频的cid:499893135
#弹幕所在地
url = "http://comment.bilibili.com/499893135.xml"
#发送请求
req = requests.get(url = url)
#获取内容响应的内容
html_byte = req.content
#将byte转为str
html_str = str(html_byte,"utf-8")
还有一点值得一提的是,发送请求的请求头可以加进去伪装成浏览器访问。可以通过header参数,加上user-agent来获取,如下:
所以,代码如下:
#假装自己是浏览器
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43'
}
#【何同学】我用108天开了个灯......视频的cid:499893135
#弹幕所在地
url = "http://comment.bilibili.com/499893135.xml"
#发送请求
req = requests.get(url = url, headers=header)
#获取内容响应的内容
html_byte = req.content
#将byte转为str
html_str = str(html_byte,"utf-8")
2.弹幕分析
html_str 是html文件的格式,我们需要对其进行处理才能得到我们想要的信息。这时候BeautifulSoup库就要登场了,我们用它来处理得到的html文件
代码如下(示例):
#解析
soup = BeautifulSoup(html,'html.parser')
#找到html文件里的标签
results = soup.find_all('d')
#把标签里的文本提取出来
contents = [x.text for x in results]
#存为字典
dic ={"contents" : contents}
contents 是一个弹幕字符串列表,它被保存为字典以供下一步使用...
3.保存弹幕
将弹幕信息存储在excel中,可以使用的库很多。例如:
我们使用 pandas 库来
代码如下(示例):
用第二步得到的字典创建一个dataFrame,然后用pandas库的一个API保存。
#用字典创建了一个电子表格
df = pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
4.总码
import requests
from bs4 import BeautifulSoup
import pandas as pd
def main():
html = askUrl()
dic =analyse(html)
writeExcel(dic)
def askUrl():
#假装自己是浏览器
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43'
}
#【何同学】我用108天开了个灯......视频的cid:499893135
#弹幕所在地
url = "http://comment.bilibili.com/499893135.xml"
req = requests.get(url = url, headers=header)
html_byte = req.content#字节
html_str = str(html_byte,"utf-8")
return html_str
def analyse(html):
soup = BeautifulSoup(html,'html.parser')
results = soup.find_all('d')
#x.text表示要放到contents中的值
contents = [x.text for x in results]
#保存结果
dic ={"contents" : contents}
return dic
def writeExcel(dic):
#用字典创建了一个电子表格
df = pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
if __name__ == '__main__':
main()
三、总结
简单来说,爬行动物需要三个步骤:
1.发送网络请求获取资源
2.进行搜索等以获得有用的信息
3.存储的信息
这篇文章就到这里了,希望对你有帮助,也希望大家多多关注编程宝的更多内容!
下一节:python scrapy框架中Request对象和Response对象的Python编程技术
一、Request 对象 Request 对象主要用于请求数据。它在爬取数据页面并重新发送请求时调用。其源码类的位置如下图所示: 这里是它的源码。该方法有...