python简单粗暴爬取微博评论区热评配图
-
本人爬虫萌新,代码是网上搜了很多示例(很多看不懂,有些也跑不了了),摸摸索索了两天才扒拉下来的,文中代码也非常简单
甚至没有设置headers,如有问题请指正,非常感谢! -
浏览完整代码请直接拖动到底部。
-
工具:Jupyter notebook, Chrome
-
第一步:确定你要爬的是哪条微博的热评,比如这个:
确定了之后我们就进入https://m.weibo.cn/,把这条找出来。
这个时候看它的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) #打印出来看看是什么
-
第三步:筛选出图片地址
玩过微博的朋友都知道,刷微博的时候默认显示的是小图,点开后显示大图,在上面的内容中也一样。另外其中也有其他图片信息,那就是评论用户的头像,这些统统都要用正则筛选掉,只选取评论配图中的大图。
#代码是接着上一步的
import re
pattern = re.compile(r'wx\d.sinaimg.cn\/large\/.+?\.jpg') #按照我们的要求编的正则
rst = pattern.findall(content)
print (len(rst)) #看看找到了几条
print(rst) #再看看有哪些
看样子就是他们了~
- 第四步:保存到本地
#同样是接上边的代码
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)
来看看下载下来了些什么
大概就是这样子了,如果要爬一条微博的全评论的话,应该是要换一个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吗,我在网上看了很多方法但是还是找不到……