Python批量下载微博博主所发相片

Python批量下载微博博主所发相片

    • 进行网站分析
    • 最终源码

我们这里以最近很火的蛇姐佘颖欣的微博做例子,爬取从她第一次发微博到现在所有发出的相片。

进行网站分析

进入https://m.weibo.cn/u/6020829791这个网站,这个是蛇姐的微博
Python批量下载微博博主所发相片_第1张图片

我们点击F12查看相片的URL在什么位置中

Python批量下载微博博主所发相片_第2张图片
我们在Elements中发现某一张图片的URL是这个,是div class="m-img-box m-imghold-square"这个div标签的一个子标签,我们于是把这个URL进行全局搜索
Python批量下载微博博主所发相片_第3张图片
我们发现这些图片都是动态加载的,而且我们发现这个页面只有部分时间的相片,我们需要下拉滚动条才能显示更远时间的相片,所以我们开始制定爬取策略,显然使用requests不太能行,我们于是想到了selenium,使用JavaScript注入实现自动化滚动条下拉,从而获取到从开始发微博的时间到现在所有的图片及其URL,从而我们可以遍历这个URL列表实现图片的下载

最终源码

import requests
import lxml.etree
import os
import re
from selenium import webdriver
import time
headers = {
     
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Mobile Safari/537.36'
}
driver = webdriver.Chrome()
driver.get('https://m.weibo.cn/u/6020829791')
time.sleep(2)
i = 1
while(i<=35): ##这是一个循环,35次是经过测试得到的可以下拉到最后时间的循环次数,以后数据增多可能要更多次循环
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') #下拉到底部的JS代码,每进行一次加载一组数据
    i+=1
    time.sleep(2)##每次进行操作都要使用time模块以免数据出错
time.sleep(5)
page_text = driver.page_source
##使用正则表达式获取所有图片的URL
mnlist = re.findall(r'
.*?',page_text,re.S) dirName="蛇姐图片" if not os.path.exists(dirName): os.mkdir(dirName) num = 1 ###遍历URL列表实现存储图片 for each in mnlist: img_data = requests.get(url = each,headers = headers).content img_path = dirName+'/'+str(num)+'.jpg' num+=1 with open(img_path,'wb') as fp: fp.write(img_data) print('保存成功!')

你可能感兴趣的:(爬虫,python,web,python,selenium,web)