學習Python二個多月啦,週末時開始興趣學習爬蟲,雖然有點概念,可是也折騰了大半天,下面就開始簡要記錄一下吧。html
經過pip安裝 requests 和 lxml 庫,在終端輸入:python
pip install requests
pip install lxml
複製代碼
注:若是是安裝到Python3就用pip3 install
git
下載過程成功的輸出:github
Collecting lxml
Cache entry deserialization failed, entry ignored
Downloading https://files.pythonhosted.org/packages/00/fd/5e65f293e366a63198dade275b886e5d24752367c2e67e3993023b0d58ef/lxml-4.2.3-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (8.7MB)
100% |████████████████████████████████| 8.7MB 821kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.3
複製代碼
爲了這過程有點興趣,我找了一個美圖的網站,爬蟲了一波圖片~正則表達式
實踐爬蟲的網站連接:https://www點aitaotu點com(注意,這不是打廣告!)chrome
page = 'https://www點aitaotu點com/guonei/36350.html'
data = requests.get(page).text
dom = etree.HTML(data)
複製代碼
title_path = '//*[@id="photos"]/h1/text()'
totalpage_path = '//*[@id="picnum"]/span[2]/text()'
image_path = '//*[@id="big-pic"]/p/a/img'
複製代碼
這裏的xpath怎麼獲取,就是網頁裏面,打開開發者檢查元素工具,在safari和chrome都有這個功能:macos
title = dom.xpath(title_path)[0]
total = dom.xpath(totalpage_path)[0]
image_url = dom.xpath(image_path)[0]
img_src = image_url.xpath('./@src')[0]
img_alt = image_url.xpath('./@alt')[0]
複製代碼
這裏解析就不解析了,其實經過PyCharm IDE可能實時查看每一個對象的屬性,能夠更清晰的瞭解解析的元素結構,幫助理解,這裏就暫時不說IDE的方法啦,你們有興趣能夠試試,也是很簡單的~django
最後拿到圖片連接,就是下載圖片而後保存輸出到電腦啊!(文章尾附完整代碼!)編程
爬蟲入門就這樣結束啦!學習了python後,發現語法很簡單,代碼很輕鬆就完成!不到100行!!!網頁爬蟲
python經過各類庫,解決了編程語言自身的龐大,完成了本身是膠水語言的特色!
經過此次實踐,其實,有不少細節東西,只有本身作了才知道,比較說保存圖片的路徑,找到當前目錄,怎麼分目錄保存,目錄文件操做,這些都是本身以前實踐了一個django工具學習過來的。因此,如今經歷多了,才知道,何時學習都不晚,有些東西,真的是不知道何時你會用上,真的,本身早知道這個道理幾年,就不像年輕時那麼想,這東西怎麼可能會用上,不學!!!果真是年輕坑爹!!!學會老,學到老吧!
#!/usr/local/bin/python3
#coding=utf-8
import os
import requests
from lxml import etree
def downloadImages(url):
data = requests.get(page).text
dom = etree.HTML(data)
title_path = '//*[@id="photos"]/h1/text()'
totalpage_path = '//*[@id="picnum"]/span[2]/text()'
image_path = '//*[@id="big-pic"]/p/a/img'
title = dom.xpath(title_path)[0]
total = dom.xpath(totalpage_path)[0]
image_url = dom.xpath(image_path)[0]
img_src = image_url.xpath('./@src')[0]
img_alt = image_url.xpath('./@alt')[0]
print(title, total, img_src, img_alt)
cwd = os.getcwd()
save_path = os.path.join(cwd, 'images/' + title)
if not os.path.exists(save_path):
os.makedirs(save_path)
print(u'保存圖片的路徑:', save_path)
img_path = os.path.dirname(img_src)
img_name = os.path.basename(img_src)
img_format = img_name.split('.')[1]
print(img_path, img_name)
for i in range(1, int(total) + 1):
new_img_url = '%s/%02d.%s' % (img_path, i, img_format)
save_img_path = '%s/%02d.%s' % (save_path, i, img_format)
# 下載圖片
image = requests.get(new_img_url)
# 命名並保存圖片
with open(save_img_path, 'wb') as f:
f.write(image.content)
if __name__ == '__main__':
url = 'https://www.aitaotu.com/'
# download list
list = ['guonei/36350.html', 'guonei/36352.html', 'guonei/36351.html', 'guonei/36357.html', 'guonei/36250.html',
'guonei/36341.html', 'guonei/36334.html', 'guonei/36306.html', 'guonei/35969.html', 'guonei/35219.html',
'guonei/36290.html', 'guonei/36277.html', 'guonei/36263.html', 'gangtai/36303.html', 'gangtai/36226.html',
'guonei/35260.html', 'guonei/35247.html', 'guonei/36257.html', 'guonei/36221.html', 'guonei/21647.html',
'guonei/21499.html', 'guonei/36319.html', 'guonei/34903.html', 'guonei/14148.html', 'guonei/33780.html',
'guonei/14338.html', 'guonei/14550.html', 'guonei/14818.html', 'guonei/16820.html', 'guonei/18388.html',
'guonei/13447.html', 'guonei/25912.html', 'guonei/13991.html', 'guonei/8246.html', 'guonei/36171.html'
]
print(u'準備下載:%d套圖', len(list))
for type in list:
page = url + type
downloadImages(page)
print(u'下載完成啦!')
複製代碼
代碼就沒有太多註釋,由於很簡單,就說一下運行方式吧,在終端:
python2:
python YellowImage.py
複製代碼
python3:
python3 YellowImage.py
複製代碼
最後的成果: