欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-04-04 10:32:32
使用selenium、requests爬取新浪微博高清图片。步骤超详细~...

案例介绍

       下图红色圈出的图片就是我们想要爬取的。全部艺人活跃粉丝榜每天更新一次,然后还有周榜和月榜,本例中,我们只需要日榜。
荐
                                                        selenium、requests爬取新浪微博高清图片
       把图片点开之后,就会显示高清图片了,这里我们最好爬取高清的。
荐
                                                        selenium、requests爬取新浪微博高清图片
荐
                                                        selenium、requests爬取新浪微博高清图片

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)

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

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

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

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秒,因为爬虫的速度一般都比较快,所以操作会比较频繁。
                        #如果不暂停一下,很容易被新浪察觉出是爬虫在模拟人而不是人的实际操作。

       可以看到,如果不把图片点开(即非高清图时),图片链接为右边红色圈起来的这块:
荐
                                                        selenium、requests爬取新浪微博高清图片
       如果把图片点开(即高清图),图片的链接就是下图右边红色圈起来这块:
荐
                                                        selenium、requests爬取新浪微博高清图片
对比上面两个链接,可以发现,高清图片就是把非高清链接中的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)

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

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