python简单粗暴爬取微博评论区热评配图

  • 本人爬虫萌新,代码是网上搜了很多示例(很多看不懂,有些也跑不了了),摸摸索索了两天才扒拉下来的,文中代码也非常简单甚至没有设置headers ,如有问题请指正,非常感谢!

  • 浏览完整代码请直接拖动到底部。

  • 工具:Jupyter notebook, Chrome

  • 第一步:确定你要爬的是哪条微博的热评,比如这个:
    python简单粗暴爬取微博评论区热评配图
    确定了之后我们就进入https://m.weibo.cn/,把这条找出来。

python简单粗暴爬取微博评论区热评配图
这个时候看它的url,把后面的数字串记住,那是每条微博独有的标识,之后就可以直接带入代码了!

  • 第二步:把这个页面的信息扒拉下来
import requests
import json

url = "https://m.weibo.cn/api/comments/show?id=&page=1" #这个地址是个模板,id=后面粘贴上刚才找到的数字串标识
#print(url)
content = requests.get(url)
content = content.text   #获取页面内容
content = json.loads(content)  #微博评论是用ajax加载的

content = str(content) #转为string,因为待会儿用正则查找图片的时候需要它为string格式
print(content)   #打印出来看看是什么

python简单粗暴爬取微博评论区热评配图

  • 第三步:筛选出图片地址
    玩过微博的朋友都知道,刷微博的时候默认显示的是小图,点开后显示大图,在上面的内容中也一样。另外其中也有其他图片信息,那就是评论用户的头像,这些统统都要用正则筛选掉,只选取评论配图中的大图
#代码是接着上一步的
import re

pattern = re.compile(r'wx\d.sinaimg.cn\/large\/.+?\.jpg') #按照我们的要求编的正则
rst = pattern.findall(content)
print (len(rst))  #看看找到了几条
print(rst)  #再看看有哪些

python简单粗暴爬取微博评论区热评配图
看样子就是他们了~

  • 第四步:保存到本地
#同样是接上边的代码
from urllib import request
import time

for i,pic in enumerate(rst):  
 
    pic_url = 'http://' + pic #加上协议
    #print(pic_url)     
    urllib.request.urlretrieve(pic_url,'C://Users/lkm/Desktop/weibo/{0}.jpg'.format(i))  #保存在已有的文件夹目录下   
    time.sleep(1)

来看看下载下来了些什么
python简单粗暴爬取微博评论区热评配图

大概就是这样子了,如果要爬一条微博的全评论的话,应该是要换一个url的,但是我没找到目前能用来爬的,如果有大佬知道请告诉我一下!

  • 最后贴一下完整代码:
import requests
import re
import json
import time
from urllib import request

url = "https://m.weibo.cn/api/comments/show?id=4071519774381280&page=1"
#print(url)
content = requests.get(url)
content = content.text
content = json.loads(content)
content = str(content)
#print(content)
    
pattern = re.compile(r'wx\d.sinaimg.cn\/large\/.+?\.jpg')
rst = pattern.findall(content)
print (len(rst))
print(rst)
#time.sleep(0.5)
    
for i,pic in enumerate(rst):  

    #pic_url = re.sub(r'\\',"",pic)
    pic_url = 'http://' + pic
    print(pic_url)
           
    urllib.request.urlretrieve(pic_url,'C://Users/lkm/Desktop/weibo/{0}.jpg'.format(i))
        
    time.sleep(1)

题外话:会爬知乎的大佬能教我一下看headers里面的authorization吗,我在网上看了很多方法但是还是找不到……