關於圖片名稱的中央亂碼問題
import requests
from lxml import etree
url = 'http://pic.netbian.com/4kmeinv/index_%d.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
for page in range(10): #頁碼數,先爬這幾頁吧,多了怕你身體抗不住
new_url = format(url%page)
if page == 1:
new_url = 'http://pic.netbian.com/4kmeinv/'
page_text = requests.get(url=new_url,headers=headers).text
tree = etree.HTML(page_text)
li_list = tree.xpath('//*[@id="main"]/div[3]/ul/li')
for li in li_list:
img_title = li.xpath('./a/img/@alt')[0].encode('iso-8859-1').decode('gbk') #在這會出現圖片標題亂碼問題,用iso-8859-1字符集處理
img_url = li.xpath('./a/img/@src')
for detail_img_url in img_url:
img_detail_text = requests.get(url='http://pic.netbian.com'+detail_img_url,headers=headers).content
img_name = detail_img_url.split('/')[-1]
file = img_name
with open(file,'wb') as f:
f.write(img_detail_text)
爬取成功,已經保存到本地了!!!!!
ISO-8859-1官方解釋
ISO-8859-1編碼是單字節編碼,向下兼容ASCII,其編碼范圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號。
此字符集支持部分於歐洲使用的語言,包括阿爾巴尼亞語、巴斯克語、布列塔尼語、加泰羅尼亞語、丹麥語、荷蘭語、法羅語、弗里西語、加利西亞語、德語、格陵蘭語、冰島語、愛爾蘭蓋爾語、意大利語、拉丁語、盧森堡語、挪威語、葡萄牙語、里托羅曼斯語、蘇格蘭蓋爾語、西班牙語及瑞典語。
英語雖然沒有重音字母,但仍會標明為ISO/IEC 8859-1編碼。除此之外,歐洲以外的部分語言,如南非荷蘭語、斯瓦希里語、印尼語及馬來語、菲律賓他加洛語等也可使用ISO/IEC 8859-1編碼。
法語及芬蘭語本來也使用ISO/IEC 8859-1來表示。但因它沒有法語使用的 œ、Œ、Ÿ 三個字母及芬蘭語使用的 Š、š、Ž、ž ,故於1998年被ISO/IEC 8859-15所取代。(ISO 8859-15同時加入了歐元符號
ISO-8859-1收錄的字符除ASCII收錄的字符外,還包括西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字符號。歐元符號出現的比較晚,沒有被收錄在ISO-8859-1當中。
因為ISO-8859-1編碼范圍使用了單字節內的所有空間,在支持ISO-8859-1的系統中傳輸和存儲其他任何編碼的字節流都不會被拋棄。換言之,把其他任何編碼的字節流當作ISO-8859-1編碼看待都沒有問題。這是個很重要的特性,MySQL數據庫默認編碼是Latin1就是利用了這個特性。
ASCII編碼是一個7位的容器,ISO-8859-1編碼是一個8位的容器。
HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集。 [1]
ISO-8859-1 的較低部分(從 1 到 127 之間的代碼)是最初的 7 比特 ASCII。
ISO-8859-1 的較高部分(從 160 到 255 之間的代碼)全都有實體名稱。
這些符號中的大多數都可以在不進行實體引用的情況下使用,但是實體名稱或實體編號為那些不容易通過鍵盤鍵入的符號提供了表達的方法。
注釋:實體名稱對大小寫敏感。