目的:用urllib2,爬一堆風景圖片
重點代碼
<code>
response = urllib2.urlopen(url).read()
soup = BeautifulSoup(
response, # html字符串
'html.parser', # html解析器
from_encoding='utf-8' # 字符編碼
)
</code>
其中,urlopen就顧名思義了,可以簡單理解為打開一個url,然后獲得該URL相對應的東西在python里的對象,然后通過read之后,就得到了頁面的所有構成元素了
先看下urlopen返回的是什么
<code>
if name=='main':
s = urllib2.urlopen('http://www.baidu.com/')
print(s.read(100))
</code>
read可以傳參數,在這里是讀取100個字符,結果如下:
然后上面重點代碼里的soup是一個BeautifulSoup對象,是一個第三方的用于html頁面內容解析的庫,當創建了一個BeautifulSoup對象之后,就可以用這個對象對html的內容進行解析,比如:
<code>
attr = {
'class':'pic',
}
nodes = soup.find_all('a',attr)
</code>find_all()函數是查找所有符合參數條件的元素,上面的代碼就是查找所有類名為pic的a元素,除了find_all之外,還有一個find元素,是查找符合條件的第一個元素,知道這兩個函數之后,已經可以爬東西了。
<code>
import urllib2
from bs4 import BeautifulSoup
def spider_image(url,pre_filename):
response = urllib2.urlopen(url).read()
soup = BeautifulSoup(
response, # html字符串
'html.parser', # html解析器
from_encoding='utf-8' # 字符編碼
)
attr = {
'class':'pic',
}
nodes = soup.find_all('a',attr)
url_list = set()
for node in nodes:
try:
url_list.add(node['href'])
except:
pass
for url in url_list:
img_html = urllib2.urlopen(url).read()
soup = BeautifulSoup(
img_html, # html字符串
'html.parser', # html解析器
from_encoding='utf-8' # 字符編碼
)
img_url = soup.find('img',id="imgView")
img_name = img_url['alt']
try:
img = urllib2.urlopen(img_url['src']).read()
print(u'正在下載圖片:'+img_name)
fout = open(pre_filename+img_name+'.jpg','wb')
fout.write(img)
fout.close()
except Exception as e:
print(e)
pass
def mkdir(path):
# 引入模塊
import os
# 去除首位空格
path=path.strip()
# 去除尾部 \ 符號
path=path.rstrip("\")
# 判斷路徑是否存在
# 存在 True
# 不存在 False
isExists=os.path.exists(path)
# 判斷結果
if not isExists:
# 如果不存在則創建目錄
print path+' 創建成功'
# 創建目錄操作函數
os.makedirs(path)
return True
else:
# 如果目錄存在則不創建,并提示目錄已存在
print path+' 目錄已存在'
return False
if name=='main':
url_list = [
'http://www.tooopen.com/img/90_894.aspx'
]
i = 1
for url in url_list:
print(u'現在開始下載第'+str(i)+u'個網站的圖片')
# 定義要創建的目錄
mkpath='F:\spider'+str(i)
# 調用函數
mkdir(mkpath)
spider_image(url,'F://spider//spider_image'+str(i)+'//')
i = i + 1
</code>
爬圖片的話,其實就是讀取到圖片之后,轉成二進制數據之后,寫入文件就行了,然后運行就可以了,然后就看到一堆圖片在目錄里