最近在學爬蟲,寫了一個爬取妹子圖片
功能:自動下載妹子圖,並自動命名
網址:http://www.netbian.com/meinv/
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 爬取妹子圖
# url:http://www.netbian.com/meinv/
# http://www.netbian.com/meinv/index_2.htm
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import re
def main():
# 輸入網址得到服務器返回的數據
allurl()
# 解析數據得到圖片鏈接和圖片名稱
# 保存圖片到本地,圖名做相應修改
# 圖片鏈接格式
findImg = re.compile(r'src="(.*?)"', re.S)
# 圖片名稱格式
findName = re.compile(r"<b>(.*?)</b>", re.S)
def findurl(url):
"""一個網頁的爬取(後面用for爬取所有網頁)"""
# head僞裝
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/78.0.3904.108 Safari/537.36"}
req = urllib.request.Request(url=url, headers=headers) # 發送信息的預處理
response = urllib.request.urlopen(req) # 得到整個網頁
# 讀取網頁並解碼
html = response.read().decode(encoding='gb18030') # 使用'utf-8'無法解碼,換爲'gb18030'
return html
def allurl():
"""循環爬取所有網頁"""
for i in range(3):
url = "http://www.netbian.com/meinv/index_"+str(i+2)+".htm"
html = findurl(url) # 獲取一個網頁
# print(html) # 測試:是否獲取到網頁
# 解析數據得到圖片鏈接和圖片名稱
bs = BeautifulSoup(html, "html.parser") # 將網頁解析爲樹形
t_list = bs.select("li>a") # 找到標籤li中的所有子標籤a,做成列表
t_list = t_list[-17:-1]
# print(t_list) # 測試:當前網頁所有妹子圖放入列表(每頁17個)
# 對每個妹子進行正則表達式提取(鏈接及名稱)
for item in t_list:
item = str(item) # 正則表達式是對字符串操作,所以先轉化爲字符串
# 提取圖片名
name = re.findall(findName, item)
# 提取鏈接,並下載
img = re.findall(findImg, item)
savejpg(name, img)
def imgurl(url):
"""獲取圖片鏈接下載圖片"""
# head僞裝
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/78.0.3904.108 Safari/537.36"}
req = urllib.request.Request(url=url, headers=headers) # 發送信息的預處理
response = urllib.request.urlopen(req) # 得到圖片鏈接
# 二進制形式讀取鏈接
html = response.read()
return html
def savejpg(name, img):
"""得到名字和鏈接存儲圖片"""
# print(name, img) # 測試:輸出圖名及對應鏈接
meizi = imgurl(img[0]) # 獲取圖片鏈接
with open('D:\FishC\項目\爬取妹子圖\爬取妹子的結果\{0}.jpg'.format(name[0]), 'wb') as f:
f.write(meizi)
if __name__ == '__main__':
# 主函數
main()
爬取結果: