鱼C论坛

 找回密码
 立即注册
查看: 791|回复: 5

[已解决]正则爬取B站弹幕遇到的错误

[复制链接]
发表于 2020-5-25 16:18:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import urllib.request
import re

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}


def open_url(url):
    req = urllib.request.Request(url,headers = headers)
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    return html

def danmu():

    url = 'https://www.bilibili.com/video/BV1Fs411A7HZ'
    html = open_url(url)

    danmus = re.findall('<span class=.+title="(.+)">',html)
    print(danmus)


danmu()

错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

求帮忙
最佳答案
2020-5-25 17:14:28
本帖最后由 xiaosi4081 于 2020-5-25 17:17 编辑

还用urllib啊?用requests:
import request
import re

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}


def open_url(url):
    req = urllib.request.Request(url,headers = headers)
    response = reuqests.get(url,headers=headers)
    html = response.text
    return html

def danmu():

    url = 'https://www.bilibili.com/video/BV1Fs411A7HZ'
    html = open_url(url)

    danmus = re.findall('<span class=.+title="(.+)">',html)
    for each in danmus
            print(each)


danmu()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 17:14:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xiaosi4081 于 2020-5-25 17:17 编辑

还用urllib啊?用requests:
import request
import re

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}


def open_url(url):
    req = urllib.request.Request(url,headers = headers)
    response = reuqests.get(url,headers=headers)
    html = response.text
    return html

def danmu():

    url = 'https://www.bilibili.com/video/BV1Fs411A7HZ'
    html = open_url(url)

    danmus = re.findall('<span class=.+title="(.+)">',html)
    for each in danmus
            print(each)


danmu()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 17:19:26 | 显示全部楼层
本帖最后由 悠悠2264 于 2020-5-25 17:24 编辑

python自带的urllib不太方便,可以使用requests,很方便,因为它可以get网页并自动解码(.text)

安装方法,在cmd输入(-i使用镜像):
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/

修改后的代码如下:
import requests
import re

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}


def open_url(url):
    html = req.text
    print(html)
    return html

def danmu():

    url = 'https://www.bilibili.com/video/BV1Fs411A7HZ'
    html = open_url(url)

    danmus = re.findall('<span class=.+title="(.+)">',html)
    print(danmus)

danmu()

urllib的:
    req = urllib.request.Request(url,headers = headers)
    response = urllib.request.urlopen(req)
就相当于requests的:
req = requests.get(url,headers = headers)
是不是很方便?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 19:32:35 | 显示全部楼层
悠悠2264 发表于 2020-5-25 17:19
python自带的urllib不太方便,可以使用requests,很方便,因为它可以get网页并自动解码(.text)

安装方 ...

我print(html)得到的是:
<?xml version="1.0" encoding="UTF-8"?><i><chatserver>chat.bilibili.com</chatserver><chatid>165642449</chatid><mission>0</mission><maxlimit>8000</maxlimit><state>0</state><real_name>0</real_name><source>k-v</source><d p="1940.09400,1,25,16777215,1584517362,0,77d09b6a,30081122185510915">è&#128;&#129;&#229;&#184;&#136;&#231;&#187;&#153;&#231;&#154;&#132;&#229;&#142;&#139;&#231;&#188;&#169;&#229;&#140;&#133;&#228;&#189;&#160;&#228;&#187;&#172;è&#131;&#189;&#231;&#148;¨&#229;&#144;&#151;</d><d p="2333.04900,1,25,16777215,1584774769,0,56d68bed,30216077480820743">&#229;&#143;ˉ&#228;&#187;¥</d><d p="2229.33000,1,25,16777215,1584883676,0,cc14bc36,30273176252448775">è&#191;&#153;&#228;&#184;a&#229;&#156;¨Pythoné&#135;&#140;é&#157;¢&#230;&#152;ˉ&#228;&#187;&#142;é&#155;&#182;&#229;&#188;&#128;&#229;§&#139;</d><d p="788.26000,1,25,16777215,1586793187,0,6746313c,31274310200459271">&#229;&#147;&#136;&#229;&#147;&#136;&#229;&#147;&#136;</d><d p="2828.19900,1,25,16777215,1586794560,0,6746313c,31275029914189831">è&#191;&#153;é&#135;&#140;&#239;&#188;&#159;</d><d p="5557.51000,1,25,16777215,1587046015,0,c417c5f4,31406864605904903">&#230;&#136;&#152;&#230;&#136;&#152;</d><d p="793.29900,1,25,16777215,1587094361,0,e4d148d8,31432212221001735">èˉ·&#230;&#148;&#182;&#228;&#184;&#139;&#230;&#136;&#145;&#231;&#154;&#132;è&#134;&#157;&#231;&#155;&#150;</d><d p="4042.10600,1,25,16777215,1587282234,0,e6c7e08e,31530711291265027">&#229;&#150;·&#228;&#187;&#150;&#229;&#147;&#136;&#229;&#147;&#136;&#229;&#147;&#136;&#229;&#147;&#136;</d><d p="2008.81800,1,25,16777215,1587800261,0,ff1e0259,31802306895806467">&#229;&#156;¨è°·&#230;-&#140;&#230;μ&#143;è§&#136;&#229;&#153;¨&#228;&#184;&#138;è&#191;&#153;&#228;&#184;a&#230;&#147;&#141;&#228;&#189;&#156;&#231;&#154;&#132;&#229;&#191;&#171;&#230;&#141;·é&#148;&#174;&#230;&#152;ˉshift+ctrl+c</d><d p="2239.46800,1,25,16777215,1587800709,0,ff1e0259,31802541766344711">&#229;&#136;&#154;&#230;&#131;3èˉ′&#229;°±&#231;&#156;&#139;è§&#129;&#229;&#137;&#141;é&#157;¢&#231;&#154;&#132;&#229;&#188;1&#229;1&#149;a&#134;&#144;</d><d p="3097.18000,1,25,16777215,1588057816,0,4f921cf3,31937339999649799">&#230;&#136;&#145;&#228;&#187;&#172;&#229;-|&#230;&#160;&#161;è&#128;&#129;&#229;&#184;&#136;&#228;&#184;&#141;è&#161;&#140;&#239;&#188;&#140;è&#191;&#153;&#228;&#184;aè&#128;&#129;&#229;&#184;&#136;è&#174;2&#229;&#190;&#151;&#229;¤a&#229;&#174;1&#230;&#152;&#147;&#230;&#135;&#130;&#228;o&#134;</d><d p="5339.60100,1,25,16777215,1588061605,0,4f921cf3,31939326645370883">tm..</d><d p="2168.87200,1,25,16777215,1588559886,0,abcf5241,32200569232818183">è&#136;&#146;&#230;&#156;&#141;</d><d p="2311.02500,1,25,16777215,1588559957,0,abcf5241,32200606474567685">&#231;&#187;&#136;&#228;o&#142;&#230;&#144;&#158;&#228;&#188;&#154;&#228;o&#134;</d><d p="5063.10400,1,25,16777215,1588673247,0,944cf531,32260002837692421">CSSè£&#133;饰&#231;&#154;&#132;</d><d p="1230.55900,1,25,16777215,1588693802,0,92af1d9b,32270779487354885">&#230;&#148;&#190;&#230;μ&#143;è§&#136;&#229;&#153;¨&#231;&#155;&#174;&#229;&#189;&#149;&#229;&#145;&#151;</d><d p="1446.26700,1,25,16777215,1588693961,0,92af1d9b,32270863238692871">é&#135;&#141;&#231;&#130;1&#230;&#157;¥&#228;o&#134;</d><d p="2300.84600,1,25,16777215,1588694833,0,92af1d9b,32271320342331397">è&#191;&#155;&#229;o|&#230;&#157;&#161;&#230;&#132;&#159;&#228;oo</d><d p="2841.27700,1,25,16777215,1588695247,0,92af1d9b,32271537425350663">highlight</d><d p="2914.79600,1,25,16777215,1588695321,0,92af1d9b,32271575970480135">&#230;&#143;&#146;&#228;&#187;&#182;&#231;&#154;&#132;é&#151;&#174;é¢&#152;&#229;&#144;§</d><d p="4734.77100,1,25,16777215,1588696810,0,92af1d9b,32272356597563399">&#231;&#156;&#139;&#229;&#174;&#140;è&#191;&#153;&#228;&#184;a&#231;&#156;&#139;&#231;&#148;μ&#229;&#189;±&#229;&#142;&#187;&#228;o&#134;</d><d p="5058.57300,1,25,16777215,1588697010,0,92af1d9b,32272461596721155">&#231;a&#129;&#231;&#132;&#182;è§&#137;&#229;&#190;&#151;è&#191;&#153;&#229;£°é&#159;3&#229;&#131;&#143;&#229;&#141;¢&#230;&#156;&#172;&#228;&#188;&#159;</d><d p="5551.41300,1,25,16777215,1588697289,0,92af1d9b,32272607636094979">è&#191;&#156;é&#137;′</d><d p="2181.75700,1,25,16777215,1589344442,0,34be8334,32611902389485575">è&#136;&#146;&#230;&#156;&#141;</d><d p="947.20600,1,25,16777215,1590321135,0,9b9c5f31,33123970686910467">&#230;&#150;&#135;&#230;&#161;£&#229;&#156;¨&#229;&#147;a&#239;&#188;&#159;</d><d p="801.97800,1,25,16777215,1590400268,0,8a5f121,33165459228983301">&#229;&#147;&#135;&#229;&#147;&#136;&#229;&#147;&#136;</d></i>

请问要怎么得到弹幕的信息呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 19:45:32 | 显示全部楼层
开心果. 发表于 2020-5-25 19:32
我print(html)得到的是:
chat.bilibili.com1656424490800000k-vè&#128;&#129;&#229;&#184;&#136;&#231 ...

没事了,搞懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 20:21:47 | 显示全部楼层

ok,给个最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 01:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表