600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python3网络爬虫:爬取堆糖照片

python3网络爬虫:爬取堆糖照片

时间:2019-11-13 23:33:56

相关推荐

python3网络爬虫:爬取堆糖照片

首先对页面进行点击分析,查看如片,分析url.

# -*- coding: utf-8 -*-import requestsimport threadingimport urllib.parse#设置最大线程 开启10个线程就锁住thread_lock = threading.BoundedSemaphore(value=10)'/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=100'#通过url 获取数据#单个页面def get_page(url):#requests.get 自带了json.loadspage = requests.get(url)#提取需要的contentpage = page.content# 将bytes转成 字符串page = page.decode('utf-8')return page#label为关键字#取所有页面pages的链接def pages_from_duitang(label):pages = []url = '/napi/blog/list/by_search/?kw={}&type=feed&start={}&limt=100'#将中文转成url编码label = urllib.parse.quote(label)for index in range(0, 110, 20):#将这两个变量替换占位符{}u = url.format(label,index)page = get_page(u)pages.append(page)return pages# print(get_page('/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=1000'))#page是get_page()返回的页面信息#startpart和endpart是边界条件,两个给定的字符串# 单个页面的对象,startpart 所要匹配字符1,匹配的字符2def findall_in_page(page,startpart,endpart):print(page)all_strings = []end = 0# 从end这个字符串开始找,找startpart# .find()!=-1说明找到该字符串,返回的是该字符串的起始下标while page.find(startpart,end) != -1:# 需要的图片的链接的起始位置startstart = page.find(startpart, end)+len(startpart)# 从起始字符串开始找结束字符串end = page.find(endpart,start)#切片 取两个所要匹配字符 之间的部分也就是图片urlstring = page[start:end]#存入列表all_strings.append(string)return all_strings# "path": "https://b-/uploads/item/08/20/085827_fa483.jpeg"def pic_urls_from_pages(pages):pic_urls = []for page in pages:# 处理一个页面urls = findall_in_page(page,'path":"','"')print(urls)pic_urls.extend(urls) # 合并列表returnpic_urlsdef download_pics(url, n):r = requests.get(url)path = '../pics' + str(n) + '.jpg'with open(path,'wb') as f:f.write(r.content)#下载完了,解锁 thread_lock.release()def main(label):pages =pages_from_duitang(label)print(pages)pic_urls =pic_urls_from_pages(pages)n = 0for url in pic_urls:n += 1print('正在下载第{}张图片'.format(n))#上锁thread_lock.acquire()#下载 这个方法丢进线程池t = threading.Thread(target=download_pics,args=(url,n))t.start()main('校花')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。