urllib库爬取拍信创意图片
解决urllib库遇到Request payload传参问题
分析网页:
找到接口:
发现图片数据都是以json格式存储在这个接口里
我们在来看接口所需要的data,这里的searchQuery参数就是我们搜索的值,所以我们可以改变它,从而爬取更多类型的图片,page就是页码,size就是每页的图片数。
明确目标后,我们就可以开始写代码了
代码如下:
#url就是接口上的url
url='https://api2.paixin.com/medias/1/search?page=0&size=80'
headers={
'Content-Type': 'application/json;charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}
data={
"searchQuery": "美女",
"type": "6"
}
#Request payload类型的data是为json字典形式的,所以我们只需要dupms一下就好了
data=json.dumps(data).encode('utf-8')
req=request.Request(url=url,data=data,headers=headers)
html=request.urlopen(req).read()
#我们得到是json字符串,要想变成字典形式需要loads一下
newhtml=json.loads(html.decode())
print(newhtml)
输出的内容就为:
这样我们就已经完成了80%了,接下来就是用for循环去遍历找到所有的图片链接,然后下载下来就好了。
完整代码如下:
from urllib import request
import json
def get_data(a,page,title):
for i in range(0,page):
url='https://api2.paixin.com/medias/1/search?page={}&size=80'.format(i)
headers={
'Content-Type': 'application/json;charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}
data={
"searchQuery": title,
"type": "6"
}
data=json.dumps(data).encode('utf-8')
req=request.Request(url=url,data=data,headers=headers)
html=request.urlopen(req).read()
newhtml=json.loads(html.decode())
print(newhtml)
for key in newhtml['elements']:
print(key['image'])
baseurl='http:{}'.format(key['image'])
request.urlretrieve(baseurl,'E:\\PyCharm Community Edition 2019.1.2\\dasj\\urlib库实践\\拍信创意\\{}.jpg'.format(a))
a+=1
print('==' * 20, '第{}页已经完毕'.format(i), '==' * 20)
if __name__ == '__main__':
a=1
title = input('请输入爬取标题:')
page=int(input('请输入爬取页数:'))
get_data(a,page,title)
新手博主,写的不好希望大家多多担待
看完的小伙伴来个一键三连吧,非常感谢
注:此文章仅供参考学习