一键追星,爬取个人微博主页下的图片
追星族,喜爱明星微博下发的个人照片,一个一个图片下载觉得麻烦,
python爬虫教你一键爬取个人微博主页下的图片
爬取网站:https://m.weibo.cn,此处为手机版的微博网址
image搜索自己喜欢的个人微博主页(用户):
此处选择第一个(并且进入其个人主页)
image image我们的目标(爬取onIyU-IU中国首站)主页下发布的所有图片
按F12此处用的百度浏览器,刷新并且选择XHr,
image以看见有三个getindex?uid=.....
这里三个文件便是我们爬取的需要的信息所在
点击第二个后我们可以看见如下的内容
image分析可以知道:
而且cardlistinfo里面的total为发的微博信息总数
并且能看到一个为since_id(记录下来,后面爬取需要)
cards 为微博信息 点击并且能看到如下信息
imageLarge下的URL便是图片的URL,python爬取图片便是这个URL
拉动滑条刷新新的内容
出现了一条新的getindex?uid=.....,点击查看
再点击Headers查看需要提交的信息
image经过研究可知道不同的微博主页下,变化的数据有
Uid , since_id
准备完毕后开始爬取(图片下载我们使用多进程池)
1.导入需要的库
import requests
import time
from urllib.parse import urlencode
from multiprocessing import Pool
2. get函数 #为得到图片的URL地址
def a(since_id='',uid=0,):
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36',
'x-requested-with': 'XMLHttpRequest',
'referer': 'https://m.weibo.cn'
}
params={
'uid':uid,
'luicode':10000011,
'lfid':'231093_-_selffollowed',
'type':int(uid),
'value':5743555203,
'containerid':'107603'+str(uid),
'since_id':since_id
}
lv=[]
url='https://m.weibo.cn/api/container/getIndex?'+urlencode(params)
req=requests.get(url,headers=headers)
req=req.json() #since_id
since_id=req.get('data').get('cardlistInfo').get('since_id')
imgs=req.get('data').get('cards')
for i in imgs:
try:
i=i.get('mblog').get('pics')
for v in i :
v=v.get('large').get('url')
lv.append(v)
except:
continue
time.sleep(0.5)
return lv,since_id
3.编写down函数 下载图片
def down(isd='',lio=''):
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36',
'x-requested-with': 'XMLHttpRequest',
'referer': 'https://m.weibo.cn',
}
re = requests.get(isd, headers=headers, )
print(re)
name = str(lio) + '.jpg'
with open(name, 'wb')as f:
f.write(re.content)
print('-' * 10)
time.sleep(0.5)
4. 主函数的编写
if __name__ == '__main__':
lvvv=[]
t=0
sw=0
u = eval(input('输入uid:'))
p = eval(input('输入页数/10:'))
try:
s = a(since_id='', uid=u)
lvvv.extend(s[0])
for o in range(p):
sw+=1
s = a(since_id=s[1], uid=u)
lvvv.extend(s[0])
print(sw)
except:pass
pool=Pool(processes=4)
for i in range(len(lvvv)):
pool.apply_async(down,(lvvv[i],i))
print('star~ star~ star~')
pool.close()
pool.join()
函数就这样编写完成了
运行后,在该程序文件下看见图片
image啊!!!
女神图片就这样一键下载下来了
网友评论