爬取網站指定頁數的圖片
(http://www.budejie.com/pic/)
需要提前掌握XPATH的相關知識!
import requests
from lxml import etree
from urllib.request import urlretrieve
# 函數作用:
# 對頁面發起請求並接收響應的內容
def getpage(url,headers):
# 對指定的地址發起請求
response = requests.get(url,headers = headers)
# 把響應的內容轉換成可以使用的XPATH匹配的內容
html = etree.HTML(response.text)
# 返回轉換的結果
return html
# 函數作用:
# 在響應內容中提取所需數據
def parsepage(url,headers):
html = getpage(url,headers)
# 獲取圖片的路徑
img_list = html.xpath('//ul/li')
for img in img_list:
src = img.xpath("//div[@class='j-r-list-c']/div[@class='j-r-list-c-img']/a/img/@data-original")
name = img.xpath("//div[@class='j-r-list-c']/div[@class='j-r-list-c-img']/a/img/@title")
# print(name)
# print(src)
# 定義一個用來接收圖片名稱的列表(後綴名)
form = []
# 提取圖片的名稱,並添加到form列表當中
for p in src:
form.append(p.split("/")[-1])
# print(form)
# 返回圖片路徑和圖片名稱
return src,name,form
if __name__ == '__main__':
# 定製請求頭(只添加了瀏覽器信息)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}
# 下載並保存前10頁的圖片
for i in range(1,11):
url = "http://www.budejie.com/pic/%s"%i
src,name,form = parsepage(url,headers)
for u in src:
for f in form:
# print(f)
# 當對應圖片路徑和對應圖片的名稱索引一致時保存
if src.index(u) == form.index(f):
print("正在下載:%s"%name[src.index(u)])
urlretrieve(u, "./images/"+f)
else:
continue