博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python关键字爬去biying图片
阅读量:4303 次
发布时间:2019-05-27

本文共 2211 字,大约阅读时间需要 7 分钟。

# -*- coding: UTF-8 -*-from bs4 import BeautifulSoupimport urllib.requestimport requestsimport timeimport jsonimport sysimport reimport os#爬取目标网站urlCRAWL_TARGET_URL = 'https://cn.bing.com/images/async?q=%s&first=%d&count=%d&relp=%d&lostate=r&mmasync=1'#每次抓取图片数量(35是此网页每次翻页请求数量)NUMS_PER_CRAWL = 35#抓取图片最小大小(单位字节),小于此值抛弃MIN_IMAGE_SIZE = 10def get_image(url, path, count):     try:         u = urllib.request.urlopen(url, timeout=5)         t = u.read()         if sys.getsizeof(t) < MIN_IMAGE_SIZE:             return -1     except Exception as e:         print(url, e)         return -2     #提取图片格式     frmt = url[url.rfind('.'):]     p = re.compile("^\\.[a-zA-Z]+")     m = p.match(frmt)     frmt = m.group(0)     try:         if not os.path.exists(path):             os.mkdir(path)         f = open(os.path.join(path, str(count)+frmt), 'wb')         f.write(t)         f.close()     except Exception as e:         print(os.path.join(path, str(count)+frmt), e)         return -3     return 0def crawl_data(info, path, num):     first = 0     count = 0     #创建一个会话     s = requests.Session()     while(count < num):         u = CRAWL_TARGET_URL%(info, first, NUMS_PER_CRAWL, NUMS_PER_CRAWL)         #3.05s为发送超时时间,10s为接收到数据超时时间         req = s.get(url =u, timeout=(3.05, 10))         bf = BeautifulSoup(req.text, "html.parser")         imgtags = bf.find_all("a", class_ = "iusc")         for e in imgtags:             if count == num:                 return             urldict = json.loads(e.get('m'))             if get_image(urldict["murl"], path, count) < 0:                 continue             print("第%d张图片下载完成,总进度%d%%"%(count+1, (count+1)*100/num))             sys.stdout.flush()             count =count+1             time.sleep(0.01)         first = first + NUMS_PER_CRAWL         time.sleep(0.1)if __name__ == '__main__':    tstart = time.time()    key_words = ['行李','衣服']        for k in range(len(key_words)):        if os.path.exists('./' + key_words[k])==False:            os.makedirs('./' + key_words[k])        path = './' + key_words[k] + '/'        picture_num = 1000        crawl_data(key_words[k], path, picture_num)    print("所有图片下载完毕,总用时%.2fs"%(time.time()-tstart))

此代码为网上所找,不记得网址了。原作看见请告知。

转载地址:http://vuhws.baihongyu.com/

你可能感兴趣的文章
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>
CentOS7 中把yum源更换成163源
查看>>
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>
linux下载github中的文件
查看>>
HDP Sandbox里面git clone不了数据(HTTP request failed)【目前还没解决,所以hive的练习先暂时搁置了】
查看>>
动态分区最佳实践(一定要注意实践场景)
查看>>
HIVE—索引、分区和分桶的区别
查看>>
Hive进阶总结(听课总结)
查看>>
大数据领域两大最主流集群管理工具Ambari和Cloudera Manger
查看>>
Sqoop往Hive导入数据实战
查看>>
Mysql到HBase的迁移
查看>>
Sqoop import进阶
查看>>