200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python爬虫获取网络图片

python爬虫获取网络图片

时间:2020-05-02 22:31:00

相关推荐

python爬虫获取网络图片

python爬虫获取网络图片

记录一下利用爬虫获取网络图片

具体操作来自博客:Python 爬虫系列教程一爬取批量百度图片

我的编辑器是vscode,首先安装三个包

pip install BeautifulSoup pip insatll requestspip install lxml

安装第一个包时,输出报错没安装上,但是利用pip list查时,确实有这个包,应该是run code的问题,我采用终端运行。

这是一个解决办法,供参考。关于VS code中 import后却显示no module的问题解决(明明安装了却无法导入,终端可以运行,输出端不行)

大佬的这个代码不需要修改,安装三个包之后可以立即运行起来。

放上源代码

# -*- coding: utf-8 -*-"""Created on Sun Sep 13 21:32:25 @author: ydc"""import reimport requestsfrom urllib import errorfrom bs4 import BeautifulSoupimport osnum = 0numPicture = 0file = ''List = []def Find(url, A):global Listprint('正在检测图片总数,请稍等.....')t = 0i = 1s = 0while t < 1000:Url = url + str(t)try:# 这里搞了下Result = A.get(Url, timeout=7, allow_redirects=False)except BaseException:t = t + 60continueelse:result = Result.textpic_url = re.findall('"objURL":"(.*?)",', result, re.S) # 先利用正则表达式找到图片urls += len(pic_url)if len(pic_url) == 0:breakelse:List.append(pic_url)t = t + 60return sdef recommend(url):Re = []try:html = requests.get(url, allow_redirects=False)except error.HTTPError as e:returnelse:html.encoding = 'utf-8'bsObj = BeautifulSoup(html.text, 'html.parser')div = bsObj.find('div', id='topRS')if div is not None:listA = div.findAll('a')for i in listA:if i is not None:Re.append(i.get_text())return Redef dowmloadPicture(html, keyword):global num# t =0pic_url = re.findall('"objURL":"(.*?)",', html, re.S) # 先利用正则表达式找到图片urlprint('找到关键词:' + keyword + '的图片,即将开始下载图片...')for each in pic_url:print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))try:if each is not None:pic = requests.get(each, timeout=7)else:continueexcept BaseException:print('错误,当前图片无法下载')continueelse:string = file + r'\\' + keyword + '_' + str(num) + '.jpg'fp = open(string, 'wb')fp.write(pic.content)fp.close()num += 1if num >= numPicture:returnif __name__ == '__main__': # 主函数入口############################### 这里加了点headers = {'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/0101 Firefox/60.0','Upgrade-Insecure-Requests': '1'}A = requests.Session()A.headers = headers###############################word = input("请输入搜索关键词(可以是人名,地名等): ")# add = '/search/flip?tn=baiduimage&ie=utf-8&word=%E5%BC%A0%E5%A4%A9%E7%88%B1&pn=120'url = '/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&pn='# 这里搞了下tot = Find(url, A)Recommend = recommend(url) # 记录相关推荐print('经过检测%s类图片共有%d张' % (word, tot))numPicture = int(input('请输入想要下载的图片数量 '))file = input('请建立一个存储图片的文件夹,输入文件夹名称即可')y = os.path.exists(file)if y == 1:print('该文件已存在,请重新输入')file = input('请建立一个存储图片的文件夹,)输入文件夹名称即可')os.mkdir(file)else:os.mkdir(file)t = 0tmp = urlwhile t < numPicture:try:url = tmp + str(t)# 这里搞了下result = A.get(url, timeout=10, allow_redirects=False)except error.HTTPError as e:print('网络错误,请调整网络后重试')t = t + 60else:dowmloadPicture(result.text, word)t = t + 60print('当前搜索结束,感谢使用')print('猜你喜欢')for re in Recommend:print(re, end=' ')

在终端输入python p.py运行程序后

按提示输入你想要的图片、数量等后

等待下载就ok了!

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