① python抓取網頁上圖片
正則表達式匹配的url有錯誤
for x in add:
print x # 這里可以看到報錯的時候是 url 錯誤
dirpath = os.path.join('C:\\Users\\lilinan\\Desktop\\新建文件夾','%s.jpg' % t)
urllib.request.urlretrieve(x,dirpath)
t+=1
② python獲取文件夾中的圖片的路徑
Python3.6.1(default,Mar222017,06:17:05)
[GCC6.3.020170321]onlinux
Type"help","right","credits"or"license"formoreinformation.
>>>importos
>>>defisimage(fn):
...returnos.path.splitext(fn)[-1]in('.jpg','.JPG','.png','.PNG')
...
>>>isimage('abs.jpg')
True
>>>isimage('abc.txt')
False
>>>dirpath='/home/zyy/汽車/卡槽'
>>>forr,ds,fsinos.walk(dirpath):
...forfninfs:
...ifnotisimage(fn):
...continue
...fname=os.path.join(r,fn)
...print(fname)
...
③ Python如何爬取百度圖片
幾乎所有的網站都會有反爬機制,這就需要在爬取網頁時攜帶一些特殊參數,比如:user-agent、Cookie等等,可以在寫代碼的時候用工具將所有參數都帶上。
④ python beautifulsoup 網頁圖片抓取
importurllib.request
importssl
frombs4importBeautifulSoup
importlxml
ssl._create_default_https_context=ssl._create_unverified_context
url="https://app.griffith.e.au/explore-student-blog/what-do-you-order-at-an-australian-cafe/"
response=urllib.request.urlopen(url)
html=response.read()
soup=BeautifulSoup(html,'lxml')
res=soup.find('div',class_='post-entry').find_all('a')[10]
result=res.find('img')['src']
print(result)
filename='photo'+'.jpg'
f=open(filename,'w')
urllib.request.urlretrieve(result,filename)
⑤ python如何才能獲取src地址
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
python
打開APP
pergoods
關注
Python多線程爬取網站image的src屬性實例 原創
2017-05-16 11:18:51
pergoods
碼齡6年
關注
# coding=utf-8
'''
Created on 2017年5月16日
@author: chenkai
Python多線程爬取某單無聊圖圖片地址(requests+BeautifulSoup+threading+Queue模塊)
'''
import requests
from bs4 import BeautifulSoup
import threading
import Queue
import time
class Spider_Test(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self.__queue = queue
def run(self):
while not self.__queue.empty():
page_url=self.__queue.get() [color=red]#從隊列中取出url[/color]
print page_url
self.spider(page_url)
def spider(self,url):
r=requests.get(url) [color=red]#請求url[/color]
soup=BeautifulSoup(r.content,'lxml') [color=red]#r.content就是響應內容,轉換為lxml的bs對象[/color]
imgs = soup.find_all(name='img',attrs={}) #查找所有的img標簽,並獲取標簽屬性值(為列表類型)
for img in imgs:
if 'onload' in str(img): [color=red]#img屬性集合中包含onload屬性的為動態圖.gif,[/color]
print 'http:'+img['org_src']
else:
print 'http:'+img['src']
def main():
queue=Queue.Queue()
url_start = 'http://jandan.net/pic/page-'
for i in range(293,295):
url = url_start+str(i)+'#comment'
queue.put(url) [color=red]#將循環拼接的url放入隊列中[/color]
threads=[]
thread_count=2 [color=red]#默認線程數(可自動修改)[/color]
for i in range(thread_count):
threads.append(Spider_Test(queue))
for i in threads:
i.start()
for i in threads:
i.join()
if __name__ == '__main__':[color=red] #在.py文件中使用這個條件語句,可以使這個條件語句塊中的命令只在它獨立運行時才執行[/color]
time_start = time.time()
main() [color=red]#調用main方法[/color]
print time.time()-time_start
[color=red]#背景知識[/color]
'''
q = Queue.Queue(maxsize = 10)
Queue.Queue類即是一個隊列的同步實現。隊列長度可為無限或者有限。可通過Queue的構造函數的可選參數maxsize來設定隊列長度。如果maxsize小於1就表示隊列長度無限。
將一個值放入隊列中
q.put(10)
調用隊列對象的put()方法在隊尾插入一個項目。put()有兩個參數,第一個item為必需的,為插入項目的值;第二個block為可選參數,默認為
1。如果隊列當前為空且block為1,put()方法就使調用線程暫停,直到空出一個數據單元。如果block為0,put方法將引發Full異常。
將一個值從隊列中取出
q.get()
調用隊列對象的get()方法從隊頭刪除並返回一個項目。可選參數為block,默認為True。如果隊列為空且block為True,get()就使調用線程暫停,直至有項目可用。如果隊列為空且block為False,隊列將引發Empty異常。
'''
[color=red]如果想要下載圖片需要
import urllib
再替換spider方法即可[/color]
def spider(self,url):
r=requests.get(url)
soup=BeautifulSoup(r.content,'lxml')
imgs = soup.find_all(name='img',attrs={})
urls=[]
for img in imgs:
if 'onload' in str(img):
print 'http:'+img['org_src']
urls.append('http:'+img['org_src'])
else:
print 'http:'+img['src']
url = urls.append('http:'+img['src'])
#下載圖片
k=0
for urlitem in urls:
k+=1
if '.jpg' in urlitem:
urllib.urlretrieve(url=urlitem,filename='F:\image\\'+str(k)+'.jpg')
[color=red]-----------多線程訪問網路實例[/color]
#coding:utf-8
import requests
import threading
import time
import sys
url = 'https://www..com'
def get_():
global url
time_start = time.time()
r = requests.get(url=url)
times = time.time()-time_start
sys.stdout.write('status:%s time:%s current_time:%s\n'%(r.status_code,times,time.strftime('%H:%M:%S')))
def main():
threads = []
thread_count = 10
for i in range(thread_count):
t = threading.Thread(target=get_,args=())
threads.append(t)
for i in range(thread_count):
threads[i].start()
for i in range(thread_count):
threads[i].join()
if __name__=='__main__':
⑥ 如何使用python批量下載圖片
1、python有socket、httplib等模塊能進行與網站間通信,如果有圖片url集合,就直接使用這些庫下載
2、如果是一些網頁中的url,可以先把網頁取下來,在用HTMLParser,sgmllib,htmllib等模塊進行頁面解析,提取出url集合
⑦ linux下python怎麼寫爬蟲獲取圖片
跟linux有什麼關系,python是跨平台的,爬取圖片的代碼如下:
import urllib.requestimport osimport randomdef url_open(url):
req=urllib.request.Request(url) #為請求設置user-agent,使得程序看起來更像一個人類
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0') #代理IP,使用戶能以不同IP訪問,從而防止被伺服器發現
'''iplist=['1.193.162.123:8000','1.193.162.91:8000','1.193.163.32:8000']
proxy_support=urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER')]
urllib.request.install_opener(opener)'''
response=urllib.request.urlopen(req)
html=response.read() return htmldef get_page(url):
html=url_open(url).decode('utf-8')
a=html.find('current-comment-page')+23
b=html.find(']',a) #print(html[a:b])
return html[a:b]def find_imgs(url):
html=url_open(url).decode('utf-8')
img_addrs=[]
a=html.find('img src=') while a!=-1:
b=html.find('.jpg',a,a+140) if b!=-1: if html[a+9]!='h':
img_addrs.append('http:'+html[a+9:b+4]) else:
img_addrs.append(html[a+9:b+4]) else:
b=a+9
a=html.find('img src=',b) for each in img_addrs:
print(each+'我的列印') return img_addrsdef save_imgs(folder,img_addrs):
for each in img_addrs: #print('one was saved')
filename=each.split('/')[-1] with open(filename,'wb') as f:
img=url_open(each)
f.write(img)def download_mm(folder='ooxx',pages=10):
os.mkdir(folder)
os.chdir(folder)
url=""
page_num=int(get_page(url)) for i in range(pages):
page_num=page_num-1
page_url=url+'page-'+str(page_num)+'#comments'
img_addrs=find_imgs(page_url)
save_imgs(folder,img_addrs)if __name__=='__main__':
download_mm()
完成
運行結果
⑧ Python 爬蟲爬坑路(二)——B站圖片,咸魚的正確 GET 姿勢
昨天在寫完 入門級爬蟲之後 ,馬上就迫不及待的著手開始寫 B站的圖片爬蟲了,真的很喜歡這個破站呢 (〜 ̄△ ̄)〜
這里不涉及到 Python 爬蟲的高級技巧,沒有使用框架,沒有考慮反爬機制,沒有使用非同步IO技術,因為這些,我都不會!
我們選定 B站的 動畫區 進行測試,打開後我們發現有好多好多圖....
但當我們使用 F12 查看這些圖片的時候,發現並沒有圖片的地址...
這就是目前大多網站使用的 Ajax 技術動態載入數據的鍋,可遇到這種情況這么辦呢?別急別急,我們知道這些圖片的地址一定是需要載入的,而目前常見WEB傳輸數據的基本就是方式 XML 和 Json (其實是我就知道這兩種...),那好我們去看看請求的 XML 和 Json 文件。
以下省略查找過程....
我們發現 B站的圖片地址是保存在 Json 裡面的,ok,我們保存好這個 json 地址:
https://api.bilibili.com/x/web-interface/dynamic/region?callback=jQuery172071087417824369_1505783866149&jsonp=jsonp&ps=15&rid=24&_=1505783866453
這個是 MAD·AMV 最新動態的 Json 文件,利用上面相同的方法,我們找到 3D區、短片·配音區、綜合區 以及 右邊排行部分 的相應 json 地址。
好在 Chrome 瀏覽器提供了一個 Preview 功能,自動幫我們整理好 數據,如下
這樣就很清晰啦,我們只需要一層層解析拿到 pic 即可。於是我們這樣寫:
我們利用 requests 內置的 json 解碼器,很不幸,報錯:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
它提示說:解碼 Json 數據的時候出了問題,可能是在 第一行 第一列,咦?好奇怪,剛才不是用瀏覽器看過結構了嗎,沒毛病啊,怎麼還在報錯:Σ(  ̄□ ̄||)
別急別急,我們先看看原始的 Json 數據長啥樣?用 瀏覽器打開上面的 json 鏈接就可以了。
(/TДT)/ 前面的那些字母是幹嘛的呀,為什麼還有括弧啊!
所以我們知道了 Json 解析錯誤 的原因啦:後面在處理的時候把前面的這部分刪掉就好啦,另外我們也發現了 archives 這個關鍵字,我們在上一張圖看見過的哦,有印象嗎?啊,你說沒有呀,沒關系,這里你只需要記著它是一個 List 的數據類型就好了呀!
為了防止被當作是 惡意訪問 從而被封 IP,這里我們選擇犧牲時間,取巧使用 sleep(x) ,讓其等待一段時間之後再發出請求。
你可能會問我,呀,你這個,根本沒有代理、沒有混淆IP防止反爬、也沒有模擬 Ajax 請求動態抓取雲雲~
那我可以很負責的告訴你,你!走錯地方了!你要找的技術貼出門右拐!( ̄へ ̄)
我們恰巧使用的是 B站的 Ajax 技術,只要哪個視頻有了最新評論(或者是一下其它的條件),就會使用 Ajax 將最新的數據取出來。就像下面這樣:
所以可能在訪問人數多的時候,更新越快,越有可能獲得更多不同的圖片啦!
之後你就可以在吃飯的時候,把它掛起,然後吃飯回來就會發現有好多好多的圖片!(=・ω・=)
之後會陸續的更新自己爬蟲的爬坑過程,希望能夠找到小夥伴一起學習呀!