日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬取网页图片

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬取网页图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

這幾天又看了下python的視頻,突然又對python感興趣起來。以前只是學了下python的基礎,感覺和其他語言沒什么大的區別,再加上編程游戲的插件pygame一直沒裝上,遂放棄了。
最近心血來潮突然又想用python來搞游戲開發,就上網搜了教程安裝pygame,這一搜便一發不可收拾。得知安裝pygame需先安裝pip,我就按著教程來,剛開始看的第一個教程是錯的,走了很多彎路,后來果斷換教程。pip的安裝可真不一樣用的是cmd命令行來安裝,只要切換到相應路徑,輸入pip install,后面文字就一直滾動,看的賊爽。習慣了windows死板的next,next無腦式,用這個可算真長見識了,也牛逼多了。
行吧,不講那么多話外題了。要想用python爬取網頁內容得先安裝python3.7,pip
輸入python

輸入pip

如果你輸入的結果反饋和我的都一樣就證明你的安裝成功了,且環境變量也配置好了。
具體python安裝可以在其他博客上看,以后我也打算把所有工具的安裝教程都分享下來,給路過的小白看看。
python推薦教程:添加鏈接描述
小甲魚的視頻詼諧幽默,通俗易懂,極力推薦

首先爬取的是html內容

用python爬取一只貓的圖片

import urllib.requestresponse =urllib.request.urlopen('http://placekitten.com/200/300') cat_img =response.read()with open('cat_200_300.jpg','wb') as f:f.write(cat_img)


wow當時出了這只貓圖片的時候我還是相當興奮的,原本只有.py一個文件,在Idle上運行過后,蹦出一只貓出來,當時我就知道自己成功爬取了網頁內容!!!怎么講呢這只是一小步吧,主要讓我認識到了學習編程給我帶來的巨大便利,而這是c語言和java從未給我的感覺。
ps:圖片生成的默認途徑是.py同級目錄

當我爬取一個圖片后就想著能不能一次性爬取更多的圖片,可以想象,當初創建公眾號的時候,為了寫點段子,我在百度上搜了好多的圖,都是一個一個的點擊下載,特別麻煩。現在通過python只需要按一下回車鍵成百上千的圖片就會出現在我的文件夾里,再不需要一個一個去點了。

剛開始我是先看了一遍視頻,第二遍看的時候就照著視頻敲,代碼量少的還行。十二十行的還湊合,一旦代碼量達到數百行,bug量就飆升了。所以我推薦那些代碼多的就直接去網上找源碼了,直接復制粘貼下來,運行,弄出成果來,在回過頭來學習分析代碼,也不失為一種好的策略。
我起碼花了一個小時去敲源碼,后面是由于代碼多,運行結果和視頻不一致,被迫放棄的。但在敲的過程中我確實對代碼結構有了更清楚的認識。

通過python爬取網頁內容(正文)

以搜狗圖片為例

爬到的圖片

import requests import json import urllibdef getSogouImag(category,length,path):n = lengthcate = categoryimgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n))jd = json.loads(imgs.text)jd = jd['all_items']imgs_url = []for j in jd:imgs_url.append(j['bthumbUrl'])m = 0for img_url in imgs_url:print('***** '+str(m)+'.jpg *****'+' Downloading...')urllib.request.urlretrieve(img_url,path+str(m)+'.jpg')m = m + 1print('Download complete!')getSogouImag('美女',200,'d:/download/風景/')

其中美女是搜索的關鍵詞,而d:/download/風景/是下載后的圖片路徑

注意:沒有安裝requests庫的同學,百度一下,用pip直接install就行。
剛開始報錯不知道怎么回事一看是第一行,語法也沒錯啊,就知道是導入的庫出錯了。

我再提供一種更新的更高級你可以自己鍵入關鍵詞,且分辨率更高的圖片,當然啦,這也都是我從網上找的:

右邊的是出現的圖形用戶交互界面,你可以任意輸入關鍵字來獲取你想得到的圖片
(左邊紅字直接忽略掉吧,反正運行成功,且操作正常)

動漫美女文件夾為空



在依次下載,稍后我們看看文件夾里出現了什么


wow好多圖片啊,而且后面還在一直增加

到100個的時候停止。這里有重復圖片,極有可能是動漫美女類的主題圖片不夠,只能用重復的來濫竽充數,湊夠100個

下面貼個源碼吧,以后好好分析,爭取一日,到網上肆虐爬取圖片去

#-*- encoding=UTF-8 -*- import urllib.request,socket,re,sys,os from urllib.request import urlopen import time from tkinter import * import webbrowser from bs4 import BeautifulSoup import requests import json import urllib##############################常量區############################## sougou_url="http://pic.sogou.com/" ###URL download_pics_path="D:/download/動漫美女/" download_pics_num=10 download_success = "" sougou_pics_tag=["pic_url","thumbUrl","bthumbUrl","ori_pic_url"] sougou_url_pics_start="http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=" sougou_url_pics_mid="&tag=%E5%85%A8%E9%83%A8&start=0&len=" sougou_url_pics_start_other="http://pic.sogou.com/pics?query=" sougou_url_pics_mid_other="&did=1&mode=1&start=0&len=" sougou_url_pics_stop_other="&reqType=ajax" ###title title_key_start="a class=\"nav-tab\" href=\"/pics/" title_key_stop="<" ###tkinter window_name="搜狗圖片下載器" window_size="500x700" frm_bg="white" real_columnspan=4 label_type_str="---------------------------------------------圖片類型---------------------------------------------" ##############################常量區##############################real_url_arr = [] ###組成url集合##############################函數區############################## ###獲取網頁上標題,返回標題數組 def get_title(url):html = urlopen(url)sougou_html = BeautifulSoup(html.read())title_key = []for ihtml in sougou_html:data1 = str(ihtml).split(title_key_start)if len(data1) > 1:for jhtml in data1:data2 = jhtml.split(title_key_stop)[0]data3 = data2.split("\">")if len(data3) == 2:title_key.append(data3[1])return title_key###獲取網頁圖片并下載,返回下載失敗個數 def get_pics(url,path):# 檢測當前路徑的有效性if not os.path.isdir(path):os.mkdir(path)pics_str = requests.get(url)pics_dict = json.loads(pics_str.text)pics_dict_items = pics_dict['all_items']i_item=0fail_count=0for item in pics_dict_items:fail_flag=0for itag in sougou_pics_tag:try:pic_url=item[itag]pic_title=item['title']if pic_title == "":pic_title = str(i_item)i_item = i_item + 1if pic_url != "":urllib.request.urlretrieve(pic_url, path + pic_title + '.jpg')print(pic_title+": download complete!")fail_flag=1breakexcept:print("download fail!")continueif fail_flag != 1:fail_count=fail_count+1return fail_countdef get_pics_other(url,path):pics_str = requests.get(url)pics_dict = json.loads(pics_str.text)pics_dict_items = pics_dict['items']i_item=0fail_count=0for item in pics_dict_items:fail_flag=0for itag in sougou_pics_tag:try:pic_url=item[itag]pic_title=item['title']pic_title=pic_title+str(i_item)i_item = i_item + 1if pic_url != "":urllib.request.urlretrieve(pic_url, path + pic_title + '.jpg')print(pic_title+": download complete!")fail_flag=1breakexcept:print("download fail!")continueif fail_flag != 1:fail_count=fail_count+1return fail_countdef url_get_othertype():global real_url_arrif PhotoType.get() != "":real_url_arr.append(PhotoType.get())real_url_arr = list(set(real_url_arr))def url_get_phototype(all_type):global real_url_arrreal_url_arr=[]url_get_othertype()if "其他" in all_type:all_type.remove("其他")for i in range(len(all_type)):if CheckType[i].get() == 1:real_url_arr.append(typeBtn[all_type[i]]['text'])real_url_arr = list(set(real_url_arr))def other_type():if OtherType.get() == 1 :type["state"] = "normal"else:type["state"] = "disabled"PhotoType.set("")def get_full_url(all_type):global download_pics_numdown_result["text"] = ""url_get_phototype(all_type)if download_num_str.get() != "":download_pics_num = int((download_num_str.get()))sum = len(real_url_arr) * download_pics_numdown_result["text"] = "準備下載: " + str(sum) + "張照片"fail_num = 0for iurl in real_url_arr:if iurl in photo_type:tmp_url=sougou_url_pics_start+iurl+sougou_url_pics_mid+str(download_pics_num)fail_num = fail_num + get_pics(tmp_url, download_pics_path)else:tmp_url=sougou_url_pics_start_other + iurl + sougou_url_pics_mid_other + str(download_pics_num) + sougou_url_pics_stop_othertime.sleep(1)fail_num = fail_num + get_pics_other(tmp_url, download_pics_path)down_result["text"] ="成功下載: " + str(sum-fail_num) + "張照片"###tkinter label占一行 def write_line(row,text="",column=0,columnspan=real_columnspan,bg=frm_bg):label = Label(frm, text=text, bg=bg)label.grid(row=row, column=column,columnspan=columnspan)return label###調用網頁 def callback(url=sougou_url):webbrowser.open_new(url)##############################函數區############################################################UI部分########################################## root =Tk() #給窗體 root.title(window_name) #設置窗體名字 root.geometry(window_size) root.resizable(width=False, height=False) ###固定窗體大小frm=Frame(root,bg=frm_bg) #新建框架 frm.pack(expand = YES,fill = BOTH) #放置框架###控制行的參數 real_row=0 ###空一行 write_line(real_row) real_row=real_row+1 ###進入官網 Button(frm,text="點擊進入搜狗圖片官網",command=callback).grid(row=real_row,column=0,columnspan=real_columnspan,sticky=N) real_row=real_row+1 ###空一行 write_line(real_row) real_row=real_row+1 ###圖片類型 write_line(real_row,label_type_str) real_row=real_row+1 ###空一行 write_line(real_row) real_row=real_row+1###checkbutton photo_type=get_title(sougou_url) photo_type.append("其他") typeBtn={} CheckType=[] real_column=0 for itype in photo_type:if itype == "其他":OtherType = IntVar()PhotoType = StringVar()type = Entry(frm, textvariable=PhotoType, width=9, state='disabled') # 添加輸入框Checkbutton(frm, text="其他", variable=OtherType, onvalue=1, offvalue=2, command=other_type).grid(row=real_row, column=1)type.grid(row=real_row, column=2, columnspan=4, sticky=W, padx=40, ipadx=60) # 放置輸入框位置else:CheckType.append(IntVar())typeBtn[itype]=Checkbutton(frm, text=itype, variable=CheckType[-1], command=lambda: url_get_phototype(photo_type))typeBtn[itype].grid(row=real_row, column=real_column)real_column=real_column+1if real_column == 4:real_column = 0real_row = real_row + 1 real_row=real_row+1###空一行 write_line(real_row) real_row=real_row+1###下載個數 lab1 = Label(frm,text = "下載個數:")# 添加Label lab1.grid(row = real_row,column=0) download_num_str = StringVar() download_num = Entry(frm,width=10,textvariable=download_num_str)# 添加Entry download_num.grid(row = real_row,column=1,sticky=W) real_row=real_row+1###空一行 write_line(real_row) real_row=real_row+1###get Button(frm,text="獲取照片",command=lambda: get_full_url(photo_type)).grid(row=real_row,column=0,columnspan=4,sticky=N) real_row=real_row+1###空一行 write_line(real_row) real_row=real_row+1###結果 down_result=write_line(real_row) real_row=real_row+1###空一行 write_line(real_row) real_row=real_row+1Button(frm,text="退出程序",command=root.quit).grid(row=real_row,column=0,columnspan=4,sticky=N) real_row=real_row+1mainloop() ##############################UI部分##########################################

等我學成之后,似乎就可以批量爬點小黃圖回來收藏收藏了(手動滑稽)

這是另一段代碼

import requests import bs4 import base64 import urllib.request num_photo = 1 def download_photo(url , num ):global num_photoresponse = urllib.request.urlopen(url)cat = response.read()with open( 'E:/編程/python/練習' + num + '.jpg' , 'wb') as f :f.write(cat)a = num_photoprint("當前已下載第%d張" % a)num_photo = num_photo + 1 def get_url(url): # 下載這個網頁headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6735.400 QQBrowser/10.2.2614.400" }res = requests.get(url , headers = headers)return res def get_soup(res):soup = bs4.BeautifulSoup(res.text , "html.parser")return soupdef get_page(num):# url = input("請輸入一個url:")url = "http://jandan.net/ooxx/page-" + str(num) + "#comments"large_url = "http://wx2.sinaimg.cn/large/"res = get_url(url)# with open("date.txt","w" , encoding ='utf-8') as file:# file.write(res.text)# print(res.text)soup = get_soup(res)num = 0 for i in soup.select('.img-hash'):#print(i.text)num = num + 1 link = base64.b64decode(i.text.encode('utf-8'))# print(link)B_link = str(link , 'utf-8').split('/')[-1]#去找到他的哈希碼#print(B_link)New_url = large_url + B_link#print(New_url)download_photo(New_url , B_link , ) def main():print("you should input tow number to request download some picture what you like:")num = input("請輸入要下載煎蛋網妹子圖的頁數:(當前輸入第一個數字)")num1 = input("請輸入要下載煎蛋網妹子圖的頁數:(當前輸入第二個數字)")for each in range(int(num) , int(num1)):get_page(each)print("下載完成!") if __name__ == "__main__":main()

網上這代碼能運行成功但是不知道圖片放哪去了,真是奇怪

后續

說說這幾天都干了什么吧,禮拜五的時候,五節c語言課基本把我時間耗完了。苦陷于鏈表不能自拔,雖然學校才教到循環結構,但我想把后面的難點給理解了。畢竟鏈表是數據結構的基礎,也是重點,懂了鏈表,算是徹底入門c了。
當然咯,也只是把鏈表的創建和遍歷完成了,途中上機課花了半個小時手打鏈表,結果一直有bug,可能是我不太懂visual c++的報錯機制,錯誤不會具體將光標指定到你那一行,最后沒成功就算了,下課直接吃飯去了。。。
周末的時候跟著社團去公園燒烤野炊,后面就都把時間花在python上了。

怎么講呢,學習都是循序漸進的,我也不急。現在主要是培養自己對編程的熱愛,以及養成每天寫博客的好習慣。把這些遇到的困難都記錄下來吧,以后回來看的時候肯定頗有感慨的。
還有就是我這樣獨立自學恐怕不會讓我堅持太久,我必須去找一些志同道合的小伙伴一起走下去。盡管學校了氣氛不是很好,但總還是有人的。
我現在還是最要提升自己的實力,想著以后有更多的交流成本。

這些天我也發現一些學習方法,比如長代碼最好別敲,直接上網找源代碼,運行成功后逐段分析,分析完后在脫稿自己打打看,錯了在返回看,如此反復,最后對概念的理解會更深一點,也更容易產生興趣,更容易在自己一個人的時候堅持下去吧。
然后對于一件事情,最好遇到挫折不要堅持超過一個小時,如果還是不成功的話會極大的消耗自己的熱情。

總結

以上是生活随笔為你收集整理的爬取网页图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。