python正则表达式爬取评论

正则表达式爬取视频评论

import requests 
import re
from bs4 import BeautifulSoup as bs
headers={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36"}
r=requests.get("https://www.bilibili.com/video/BV1YV4y1u75o/?spm_id_from=333.337.search-card.all.click&vd_source=9dd8cff38385df03103af6cc27c15471",headers=headers) #发起网络请求
text=r.text
pattern=re.compile(('<span class="reply-content">(.*?)</span>'),re.S)
results=re.findall(pattern,text)
results

问题
为什么爬出来是空集

img

我的建议是,先用菜鸟的正则测试测一下,然后测出来之后对代码做一些调整

比如说,re.compile改为re.match可能对你这个需求会更好一些。

你好,根据你提供的代码,我看到有几个可能的问题:

  1. re.S 选项的使用不正确。re.S 表示点号 . 可以匹配换行符,但是你的正则表达式中并没有使用到点号,所以不需要这个选项。去掉它可能会解决问题。
  2. 网页源代码中评论内容的标签可能变了。如果评论内容的标签变成了

    而不是 ,那么你的正则表达式无法匹配到内容,会返回空列表。你需要检查网页源代码,找到正确的标签。

  3. 网络请求发送失败或返回的网页源代码不正确。你可以检查 r 的状态码是否为 200,并检查 text 的内容是否正确包含评论信息。如果不正确,那么正则表达式无法工作,会返回空列表。
  4. B站的反爬机制起作用了。B站有一定的反爬虫技术,可能识别出你的请求来自爬虫,并返回错误或不完整的网页源代码。你可能需要通过设置代理,修改 User-Agent 等方法来绕过反爬虫机制。
  5. Python 的 re 模块 bug。这种情况较少见,你可以尝试安装最新版本的 re 模块,或使用其他正则表达式库如 PyRegex 来验证。
    总之,我认为问题最有可能出在网页源代码获取或解析上。你应该首先检查网页源代码,确保能正确获取到评论内容,然后再根据网页源代码的变化对应调整正则表达式。