python爬取img(Python爬取網易雲音樂)

本文目錄一覽:

如何用python實現爬取微博相冊所有圖片?

三種方案:

1.直接用Python的requests庫直接爬取,不過這個需要手動做的事情就比較多了,基本上就看你的Python功力了

2.使用scrapy爬蟲框架,這個框架如果不熟悉的話只能自己先去了解下這個框架怎麼用

3.使用自動測試框架selemium模擬登錄操作,及圖片爬取,這個對於大多數會點Python編碼的人來說是最好的選擇了,他比較直觀的能看到怎麼去獲取數據

每種方案的前提都是你必須有一定基礎的編碼能力才行,不是隨便一個人就能用的

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()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

完成

運行結果

使用python爬取網頁,獲取不到圖片地址

這個大圖片是在點擊之後用 JS 控制載入的。

你可以看看 js/js.js 這個文件,253 行:

function changeImg(){

jQuery(“#bitImg”).attr(‘src’,’p/p’+pictID+’/’+indexNum+’.’+jpgPng);

}

其實大圖的規律很好找, 下面縮略圖列表的 src 可以用 #variContent li img 取到,可以在源碼中的 107 行找到:

view-source:

縮略圖列表地址長這樣:

/p/p0997/tn/1.jpg

/p/p0997/tn/2.jpg

/p/p0997/tn/3.jpg

如果要獲取大圖,只要去掉「tn」這一段就可以:

/p/p0997/1.jpg

/p/p0997/2.jpg

/p/p0997/3.jpg

然後拼接域名在前面,GET 下來就是大圖,比如第一個大圖鏈接:

第一個大圖地址

不過,你如果僅僅只是想要抓那個站的全部素材,窮舉「p0997」這一段的序號(比如改成「p0098」,這個應該是圖集的 ID),並且遍歷最後一段的圖片序號,擴展名可能是 jpg 也可能是 png,從 1 開始(「1.jpg」,「2.jpg」…)直到返回 404 停止。

思路大概是這麼個思路,不過話說回來,你這麼爬人家素材真的道德嗎?

python爬蟲如何創建image文件夾

有自動創建功能,也可以使用代碼。1.觀察網頁,找到img標籤;2.通過requests和BS庫來提取網頁中的img標籤;3.抓取

_mg標籤後,再把裡面的src給提取出來,接下來就可以下載圖片了;

?

?4.通過urllib的urllib.urlretrieve來下載圖片並且放進文件夾裡面(第一之前的準備工作就是獲取當前路徑然後新建一個文件夾);

?5.如果有多張圖片,不斷的重複3-4。

python爬取圖片時忽略了一些圖片

真實圖片地址是在客戶端javascript代碼中計算出來的.

你需要尋找

span class=”img-hash”Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=/span

這樣的內容,取出

Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=

這段內容,做base64解碼即得圖片地址。

相應的腳本在

//cdn.jandan.net/static/min/91798e4c623fa60181a31d543488217eB2GDr79r.03100001.js

這段內容你通過get_page()爬到地頁面中有,同樣,該頁面中有這樣的html(為便於閱讀已重排格式):

div class=”text”

  span class=”righttext”

    a href=”//jandan.net/ooxx/page-34#comment-4001800″4001800/a

  /span

  p

    img src=”//img.jandan.net/img/blank.gif” onload=”jandan_load_img(this)” /

    span class=”img-hash”Ly93dzMuc2luYWltZy5jbi9tdzYwMC8wMDczdExQR2d5MWZ3Z3h6ajlrMGtqMzBpYjBramtnaS5qcGc=/span

  /p

/div

這個img的onload調用的函數就在前面給出的那個js文件中:

function jandan_load_img(b){

  var d=$(b);

  var f=d.next(“span.img-hash”);

  var e=f.text();

  f.remove();

  var c=jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN(e,”DGmLfT4H73yJdXXpXs3pw7uAiICcflZS”);

  var a=$(‘a href=”‘+c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.(gif|jpg|jpeg))/,”$1large$3″)+

          ‘” target=”_blank” class=”view_img_link”[查看原圖]/a’);

  d.before(a);

  d.before(“br”);

  d.removeAttr(“onload”);

  d.attr(“src”,location.protocol+c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.gif)/,”$1thumb180$3″));

  if(/\.gif$/.test(c)){

    d.attr(“org_src”,location.protocol+c);

    b.onload=function(){

      add_img_loading_mask(this,load_sina_gif)

  }

}

它調用了jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN對img-hash的內容做解碼,這個函數同樣在這個js文件中:

var jdDw3Ldvi4NcbKboi4X19hCAmdC3Q3aZvN=function(o,y,g){

  var d=o;var l=”DECODE”;

  var y=y?y:””;

  var g=g?g:0;

  var h=4;

  y=md5(y);

  var x=md5(y.substr(0,16));

  var v=md5(y.substr(16,16));

  …中間部分略去…

  if(l==”DECODE”){

    m=base64_encode(m);

    var c=new RegExp(“=”,”g”);

    m=m.replace(c,””);

    m=u+m;

    m=base64_decode(d)

  }

return m

};

你只需要在Python使用相應的庫對抓取到的img-hash內容做解碼即可得到圖片地址。

你使用了str的find來從文本中定位位置,這樣做太麻煩了,太多的代碼細節,使用re模塊做正則匹配就簡單很多,更快的是直接使用現有的爬蟲庫.

使用re進行正則匹配,只需要使用正則式’span class=”img-hash”(.+?)’即可提取出該頁面中所有加密的圖片地址。

import re

import base64

pat = re.compile(‘span class=”img-hash”(.+?)’)

def get_imgurls(url):

    urls = []

    for imgurl in pat.findall(url_open(url).decode(‘utf-8’)):

        .append(str(base64.b64decode(imgurl), ‘utf-8’))

    return urls

然後就可以對get_imgurls返回的列表遍歷,逐個交給save_img處理了。

使用爬取庫也只需要尋找span,從中找出class=’img-hash’即可讀取text。

怎麼使用python扒網上的照片

# coding=utf-8

# 聲明編碼方式 默認編碼方式ASCII

import urllib

import time

import re

import os

””’

Python下載游迅網圖片 BY:Eastmount

”’

””’

**************************************************

#第一步 遍歷獲取每頁對應主題的URL

**************************************************

”’

fileurl=open(‘yxdown_url.txt’,’w’)

fileurl.write(‘****************獲取游訊網圖片URL*************\n\n’)

#建議num=3 while num=3一次遍歷一個頁面所有主題,下次換成num=4 while num=4而不是1-75

num=3

while num=3:

temp = ”+str(num)+’.html’

content = urllib.urlopen(temp).read()

open(‘yxdown_’+str(num)+’.html’,’w+’).write(content)

print temp

fileurl.write(‘****************第’+str(num)+’頁*************\n\n’)

#爬取對應主題的URL

#div class=”cbmiddle”/div中a target=”_blank” href=”/html/5533.html”

count=1 #計算每頁1-75中具體網頁個數

res_div = r’div class=”cbmiddle”(.*?)/div’

m_div = re.findall(res_div,content,re.S|re.M)

for line in m_div:

#fileurl.write(line+’\n’)

#獲取每頁所有主題對應的URL並輸出

if “_blank” in line: #防止獲取列表list/1_0_1.html list/2_0_1.html

#獲取主題

fileurl.write(‘\n\n********************************************\n’)

title_pat = r’b class=”imgname”(.*?)/b’

title_ex = re.compile(title_pat,re.M|re.S)

title_obj = re.search(title_ex, line)

title = title_obj.group()

print unicode(title,’utf-8′)

fileurl.write(title+’\n’)

#獲取URL

res_href = r’a target=”_blank” href=”(.*?)”‘

m_linklist = re.findall(res_href,line)

#print unicode(str(m_linklist),’utf-8′)

for link in m_linklist:

fileurl.write(str(link)+’\n’) #形如”/html/5533.html”

””’

**************************************************

#第二步 去到具體圖像頁面 下載HTML頁面

#注意先本地創建yxdown 否則報錯No such file or directory

**************************************************

”’

#下載HTML網頁無原圖 故加’#p=1’錯誤

#HTTP Error 400. The request URL is invalid.

html_url = ”+str(link)

print html_url

html_content = urllib.urlopen(html_url).read() #具體網站內容

#可注釋它 暫不下載靜態HTML

open(‘yxdown/yxdown_html’+str(count)+’.html’,’w+’).write(html_content)

””’

#第三步 去到圖片界面下載圖片

#點擊”查看原圖”HTML代碼如下

#a href=”javascript:;” style=””onclick=”return false;”查看原圖/a

#通過JavaScript實現 而且該界面存儲所有圖片鏈接script/script之間

”’

html_script = r’script(.*?)/script’

m_script = re.findall(html_script,html_content,re.S|re.M)

for script in m_script:

res_original = r'”original”:”(.*?)”‘ #原圖

m_original = re.findall(res_original,script)

for pic_url in m_original:

print pic_url

fileurl.write(str(pic_url)+’\n’)

””’

#第四步 下載圖片

#如果瀏覽器存在驗證信息如維基百科 需添加如下代碼

class AppURLopener(urllib.FancyURLopener):

version = “Mozilla/5.0”

urllib._urlopener = AppURLopener()

”’

filename = os.path.basename(pic_url) #去掉目錄路徑,返迴文件名

#No such file or directory 需要先創建文件Picture3

urllib.urlretrieve(pic_url, ‘E:\\Picture3\\’+filename)

#IOError: [Errno socket error] [Errno 10060]

#只輸出一個URL 否則輸出兩個相同的URL

break

#當前頁具體內容個數加1

count=count+1

time.sleep(0.1)

else:

print ‘no url about content’

time.sleep(1)

num=num+1

else:

print ‘Download Over!!!’

原創文章,作者:XYM24,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/127692.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XYM24的頭像XYM24
上一篇 2024-10-03 23:16
下一篇 2024-10-03 23:16

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論