微博美女
打开微博官网,这里以爬取美女博主Duebass的所有图片为例,首先打开她的主页
主页中显示的都是一些小图,我们点击其中的某一张图片,就可以查看她的大图了。
打开F12查看图片的地址信息,
//wx4.sinaimg.cn/mw690/75614297ly1g2sq66raswj21vl2qae82.jpg
复制这个地址去源代码中搜索,我们发现搜索不到这个url,那么狠明显,图片的地址信息是存放在js或者json文件中的。由于电脑端查看的信息不是很完整,这里我们使用手机端的模式来查看。点击左上角的手机图标然后刷新页面就可以切换到手机浏览模式
切换到手机视图之后,我们再打开Network这个选项,刷新页面信息,可以看到服务的发送了很多的文件过来,翻看这些文件我们发现其中有一个以getIndex开头的文件里面返回的信息中,包含了大量的图片的地址信息,使用浏览器打开这些图片,
图片正是我们所需要的,有些是大图,有些是小图,进一步分析发现,在一个pics数组中,带有large属性的图片是大图,而没有的则是小图。
知道这些信息之后,我们还需找到其他的分页地址信息,因为当前返回的数据中的图片并没有多少,用鼠标拖动页面获取更多的图片,然后在network中找到对应的地址,复制两个不同页的地址我们可以发现,除了page不同之外,其他的都是相同的。
https://m.weibo.cn/api/container/getIndex?is_hot[]=1&is_hot[]=1&jumpfrom=weibocom&type=uid&value=1969308311&containerid=1076031969308311&page=3
https://m.weibo.cn/api/container/getIndex?is_hot[]=1&is_hot[]=1&jumpfrom=weibocom&type=uid&value=1969308311&containerid=1076031969308311&page=4
最后我们还需找到一共有多少页,
查看头部信息
total的数量是4081,然后每页大概有几十张图片,我们将page参数的值改成50,查看头信息,发现page显示的是50,然后将page值改成60,发现显示的还是50,说明它的页数也就是50了,知道这些信息之后,那么写出代码就变得很简单了。
#爬取微博 Duebass的图片
from urllib import request
import re
import ssl
file_path = 'F:/blog/'
#http://wallpaper.apc.360.cn/index.php?c=WallPaper&a=getAPPsByCategory&cid=6&start=6590&count=50
base_url = 'https://m.weibo.cn/api/container/getIndex?is_hot[]=1&is_hot[]=1&jumpfrom=weibocom&type=uid&value=1969308311&containerid=1076031969308311&page='
header = {
'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36Mozilla/5.0 (iPhone; cpu iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
'Accept': 'application/json, text/plain, */*',
'referer': 'https://m.weibo.cn/p/1005051969308311/photos?from=page_100505&from=page_100505&mod=TAB&mod=TAB&jumpfrom=weibocom'
}
context = ssl._create_unverified_context()
for i in range(5, 6):
try:
realurl = base_url+str(i)
req = request.Request(url=realurl, headers=header)
#resp = requests.get(realurl, headers=header)
resp = request.urlopen(req, context=context).read().decode()
print('==============正在下载第'+str(i)+'页的图片===============')
# 先获取所有的large里面的url,注意观察,大图的url中都包含/large,那么我们获取所有的url然后过虐掉不包含/large的url就行了
pat = '"url":"(.*?)"'
list1 = re.compile(pat).findall(resp)
list2 = filter(lambda url : url.find('/large') != -1, list1)
list2 = list(list2)
for j in range(0, len(list2)-1):
pic_url = list2[j].replace('\/', '/')
request.urlretrieve(pic_url, file_path+str(i)+str(j)+'.jpg')
print('============第' + str(i) + '页的图片下载完成===============')
except Exception as ERROR:
print(error)
下载过程中可能会出现计算机拒绝等异常信息,可根据控制台打印的情况,将出了异常的页数重新下载。
文章最后发布于: 2019-05-12 16:44:23
相关阅读
A5创业网(公众号:iadmin5)3月13日消息,不用掏手机,也不用输入取件码, “靠面子”就能取回快递了。菜鸟网络宣布,国内所有带
核心摘要:对于预算有限的品牌主来说,常常会遇到以下问题:如何通过KOL精准的圈选符合品牌策略的TA(目标受众)?实际KOL流量如何有效真
array_slice($arr,0,3) //获取键值0-3的数组元素更多:http://www.php100.com/cover/php/191.html
# coding:utf-8 # 盐工教务系统 import urllib2,urllib import cookielib,re #临时存储学生cookie stuCookie='' #声明一个Cook
每年的双十一活动都会推出非常划算的福利购物活动,小编不知道大家有没有听说,今年的双11合伙人活动集能量共同瓜分10亿红包,还不知道