荐 selenium、requests爬取新浪微博高清图片
程序员文章站
2022-06-05 18:59:17
使用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)
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