python 爬取动态网页(百度图片)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38204686/article/details/79179368
# python 3.6.3
import re
import os
from urllib import parse
from urllib import request
###################################################
# 搜索关键字   下载数量  存放路径
word = '美女'
num = 10
path = 'C:/Users/Administrator/Desktop/img/' 
###################################################
# 网页地址  正则表达式
url = ('https://image.baidu.com/search/acjson?'
'tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&'
'queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&'
'word={word}&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&'
'pn={pn}&rn=30&gsm=5a&1516945650575=')
pattern = '"thumbURL":"(.+?\.jpg)"'
###################################################
# 输入需要下载数量和关键字  返回获取所有url
def geturls(num,word):
    word = parse.quote(word)
    urls = []
    pn = (num//30+1)*30
    for i in range(30,pn+1,30):
        urls.append(url.format(word = word,pn = i)) 
    return urls
   
# 输入需要下载数量和urls 返回所有图片
def getimgs(num,urls):
    imgs = []
    reg = re.compile(pattern)
    for url in urls:
        page = request.urlopen(url)
        code = page.read()
        code=code.decode('utf-8')
        imgs.extend(reg.findall(code))
        #print(code)
    return imgs

# 下载图片
if not os.path.exists(path):
    print('路径不正确')
    os._exit()
urls = geturls(num,word)   
imgs = getimgs(num,urls)

i = 0
for img in imgs:
    i = i + 1
    request.urlretrieve(img,path + '%s.jpg' %i)
    #print(img)
    print('成功下载第'+str(i)+'个图片')
    if i>=num:
        break

################问题#####################
#1.parse.quote(word) 要把关键字转成url
#2.url 正则表达式 要细心
#3.注意图片的url 有的不能访问

################总结#####################
#1.先分析动态网页请求图片的url 分析url参数并仿照着请求
#2.成功后解析返回的数据 可以选用正则表达式提取需要的数据
#3.使用所提取到的数据

猜你喜欢

转载自blog.csdn.net/qq_38204686/article/details/79179368