荐 selenium、requests爬取新浪微博高清图片

2022-08-03,,,,

文章目录

  • 案例介绍
  • step1:导入必要的包,模拟浏览器打开新浪微博首页
  • step2:登录微博账号,进入艾漫数据的微博主页,搜索“全部艺人活跃粉丝榜”
  • step3:获取目标图片的url
  • step4:获取目标图片,并存入本地

案例介绍

       下图红色圈出的图片就是我们想要爬取的。全部艺人活跃粉丝榜每天更新一次,然后还有周榜和月榜,本例中,我们只需要日榜。

       把图片点开之后,就会显示高清图片了,这里我们最好爬取高清的。

step1:导入必要的包,模拟浏览器打开新浪微博首页

from selenium import webdriver
import time
import requests
url = 'https://weibo.com/' 
driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get(url)

step2:登录微博账号,进入艾漫数据的微博主页,搜索“全部艺人活跃粉丝榜”

step3:获取目标图片的url

pic_urls = []
for page in range(10): 
    #抓取10个页面的信息
    for xiala in range(3): 
        #执行3次页面下拉(为什么要执行页面下拉?因为页面经过下拉之后会显示更多的信息)
        driver.execute_script('window.scrollTo(0,document.body.scrollHeight)') 
        time.sleep(2) #每次下拉之后暂停两秒(即给模拟的浏览器2秒的缓冲时间(加载出下拉页面))
    
    whole_mes = driver.find_elements_by_xpath('//div[@class = "WB_detail"]') #一个页面的所有微博
    for i in range(len(whole_mes)):
        if '全部艺人活跃粉丝榜' in whole_mes[i].text: #选出符合条件的微博
            url = whole_mes[i].find_element_by_xpath('.//img').get_attribute('src')
            url = url.replace('orj360','mw690') #经观察发现,url含orj360的图片较为模糊,换成mw690之后就是高清图了
            if len(url)==65: #经观察发现,根据‘全部艺人活跃粉丝榜’这个条件筛选出来的微博中,有几条是我们不需要的(这几条是周榜和月榜的,而我们需要的是日榜),这几条的url都大于65,所以我们可以根据这一情况,把这几条微博过滤掉
                pic_urls.append(url)
    
    driver.find_element_by_xpath('//a[@class="page next S_txt1 S_line1"]').click() #执行 点击"下一页" 的操作
    time.sleep(2) #给模拟浏览器2秒的加载时间
    if page%4==0:
        time.sleep(15)  #暂停15秒,因为爬虫的速度一般都比较快,所以操作会比较频繁。
                        #如果不暂停一下,很容易被新浪察觉出是爬虫在模拟人而不是人的实际操作。

       可以看到,如果不把图片点开(即非高清图时),图片链接为右边红色圈起来的这块:

       如果把图片点开(即高清图),图片的链接就是下图右边红色圈起来这块:

对比上面两个链接,可以发现,高清图片就是把非高清链接中的orj360换成了mw690.

step4:获取目标图片,并存入本地

headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36'}
for i in range(len(pic_urls)):
    response = requests.get(pic_urls[i],headers=headers)
    with open('./pic/{}.jpg'.format(i),'wb') as f: #将每张图片以jpg格式存入pic文件夹中
        f.write(response.content)

本文地址:https://blog.csdn.net/weixin_41391619/article/details/107353177

《荐 selenium、requests爬取新浪微博高清图片.doc》

下载本文的Word格式文档,以方便收藏与打印。