python抓取网页数据(如何养搬运B站弹幕的“虫”?解析)

优采云 发布时间: 2022-02-09 15:14

  python抓取网页数据(如何养搬运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 对象主要用于请求数据。它在爬取数据页面并重新发送请求时调用。其源码类的位置如下图所示: 这里是它的源码。该方法有...

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线