python小爬蟲

目的:用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個字符,結果如下:

可見讀取到的是一個完整的HTML頁面
  • 然后上面重點代碼里的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>

爬圖片的話,其實就是讀取到圖片之后,轉成二進制數據之后,寫入文件就行了,然后運行就可以了,然后就看到一堆圖片在目錄里


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容