python爬虫关键词爬取百度的图片-泓源视野

python爬虫关键词爬取百度的图片

python爬虫爬取百度上的图片,按特定关键词实现主题爬虫

 

文章

实现关键字爬取百度图片,并保存

 

代码与分析

自己做的任务,方便保存可以随时回来看作为一个笔记。

python 爬虫的方法有很多种

python爬虫关键词爬取百度的图片插图在这里插入代码片

# _*_ coding:utf-8 _*_# 工程作者:赖正良# 时间:2020/9/21/11:35from tkinter import *import requestsimport reimport osfrom urllib import parsefrom urllib import requestfrom urllib.request import urlretrievefrom bs4 import BeautifulSoupimport tkinter as tk# 定义一个gui界面显示# 显示图像框def main(): running = 1 global url_input,text,sshow # 创建空白窗口,作为主载体 root = Tk() root.title('爬取数据') # 窗口的大小,后面的加号是窗口在整个屏幕的位置 root.geometry('550x400+398+279') # 标签控件,窗口中放置文本组件 Label(root,text='请输入关键词:',font=("华文行楷",20)).grid() # 定位 pack包 place位置 grid是网格式的布局 url_input = Entry(root,font=("华文行楷",20)) url_input.grid(row=0,column=1) # 输入 #text = Listbox(root,font=('华文行楷',20),width=45,height=10) text = tk.Text(root, font=('华文行楷', 20), width=45, height=10) # columnspan 组件所跨越的列数 text.grid(row=1,columnspan=2)# 爬虫函数,爬取关键字的内容# 定义一个爬虫函数 def get_picture(): word = url_input.get() 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)"' 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 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# 获取url,设置存放图片的位置 word = url_input.get() # 输入关键字进行搜索 num = 50 # 最多打印100张图片 path = r'E:\南昌大学学习研究2020年5月\my_data' # 图片存贮的路径 # 判断图片保存路径是否存在,不存在就创建 if not os.path.exists(path): os.mkdir(path) print('路径不存在,但已新建') # 进入百度图片搜索网页,搜索关键字,获取num整除30页图片搜索页面的地址列表 urls = geturls(num, word) # 百度搜索页面地址 # 打开urls列表中的url,用正则表达式搜索以.jpg结尾的图片源地址url,保存到imgs列表中,imgs中的url是30的倍数 imgs = getimgs(num, urls) # 图片地址# 获取图片,保存图片 i = 0 # 下载序号 j = 0 # 请求超时数量 for img in imgs: i += 1 try: request.urlretrieve(img, path + '/' + '%s.jpg' % (i - j)) # 将图片下载到指定目录 except OSError as err: # 下载超时处理 print('下载第%s图片时请求超时,已跳过该图片' % (i - j)) else: # stri = print('成功下载第' + str(i - j) + '张图片') sshow= '成功下载第' + str(i - j) + '张图片' print(sshow) text.insert(END,sshow+'\n') # 在gui界面中动态显示下载的图片数量 text.see(END) # 更新每次打印 # 更新 text.update() if (i - j) >= num: # 判断是不是下载量达到指定数量 print('下载图片完毕,成功下载%d张照片,跳过%d张照片' % ((i - j), j)) break# 设置按钮 sticky对齐方式,N S W E button =Button(root,text='开始下载',font=("华文行楷",15),command=get_picture).grid(row=2,column=0,sticky=W) button =Button(root,text='退出',font=("华文行楷",15),command=root.quit).grid(row=2,column=1,sticky=E) if running == 1: root.mainloop()if __name__ == '__main__': main()

python爬虫关键词爬取百度的图片插图1
python爬虫关键词爬取百度的图片插图2

总结笔记

关键分析html码,记录下自己笔记

出现错误requests.exceptions.TooManyRedirects: Exceeded 30 redirects.
>>>

是因为默认最多只能30个请求 在请求中加入allow_redirects=False

response = requests.get(url, allow_redirects=False)
本文由 泓源视野 作者:admin 发表,其版权均为 泓源视野 所有,文章内容系作者个人观点,不代表 泓源视野 对观点赞同或支持。如需转载,请注明文章来源。
16
admin

发表评论

Protected with IP Blacklist CloudIP Blacklist Cloud
您是第8234757 位访客, 您的IP是:[3.149.233.72]