記錄一次python爬蟲批量下載一個校花網站的妹子圖片
阿新 • • 發佈:2018-11-05
學python也快2個禮拜了,從開始看別人寫的爬蟲程式碼,然後試著抄著學習,感覺沒太大進步,最大收穫就是改了幾處bug(可能有些地方不適用我的pyyhon平臺報錯)。
中午看到一個帖子校花妹子圖使用爬蟲進行批量下載,看了下,感覺不錯(我說的技術,哈哈哈)。
然後決定自己寫一個爬蟲,已經看書兩個禮拜了,也要練一練了。
宣告:程式碼寫的不怎麼好,大神別嫌棄,可以給些建議。
先來點圖片養個眼,提升下動力。
這個是批量下載的一個妹子的圖片。
開始爬蟲:本次使用的環境是linux-ubantu,python3。
import urllib.request from bs4 import BeautifulSoup import requests
先獲取頁面連結內容
get_url = urllib.request.Request(url, headers)
res = urllib.request.urlopen(get_url).read()
res是獲取的html網頁。使用python的現成庫BeautifulSoup去進行搜尋。先去網頁F12分析:
如下圖:
我畫紅框的那兩個關鍵點,第一個是圖片的list表,從這裡可以獲取每一個校花的列表。
soup = BeautfulSoup(res, "html.parser") pict_list = soup.find('div', id='list_img').find_all('a', target='_blank')
獲取完的資訊是下面這樣的,可以看出一個校花的資訊出現了兩次,那就寫一個判斷的每次只取一個(方法簡單不單獨寫了,所有程式碼附在最後)
find方法找到一整個列表, find_all方法發現每個校花的詳細資訊。
第二個烈表示其中之一校花的網頁連結,通過這個連結可以知道這個校花所有的圖片,然後開啟這個網頁,再針對單個校花進行分析:看圖
分析得出:每張妹子圖都在div的class =="p-tmb"中間,使用find_all方法找出所有的,然後單獨找出每一張的圖片所在的資訊行,使用find找出來。
soup = BeautifulSoup(ret_girl_url, "html.parser") picture = soup.find_all('div', class_='p-tmb')
仔細看,jpg格式的連結,是不完整的,自己把頭部加一下,頭部就是這個網頁的首頁地址。
獲得了這麼多資訊,就可以直接進行下載儲存了
這就下載好了,下載好的圖片在一開始就已經展示了,在這裡就不再展示了,把原始碼附在這裡,想學習的可以看看,也可以給點建議,共同進步。
import urllib.request
from bs4 import BeautifulSoup
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102UBrowser/6.1.2107.204 Safari/537.36'}
url_list = []
def get_href(url):
if url in url_list:
return None
else:
url_list.append(url)
return url
def down_pic(url):
r = requests.get(url, headers)
name = url[-10:-4]
print(name)
with open(name+'.jpg', 'wb') as f:
for chunk in r.iter_content(1024):
if chunk:
f.write(chunk)
def get_url_list(url):
get_url = urllib.request.Request(url, headers=headers)
res = urllib.request.urlopen(get_url).read()
soup = BeautifulSoup(res, "html.parser")
pict_list = soup.find('div', id='list_img').find_all('a', target='_blank')
return pict_list
def get_new_url(content):
html = content['href']
new_url = get_href(html)
if new_url == None:
return None
else:
return new_url
def get_picture_url_info(url):
girl_url = urllib.request.Request(url, headers=headers)
ret_girl_url = urllib.request.urlopen(girl_url).read()
soup = BeautifulSoup(ret_girl_url, "html.parser")
picture = soup.find_all('div', class_='p-tmb')
return picture
def get_addr(girl_url):
tmp = girl_url.find('img')
addr = tmp['src']
www = "http://www.xiaohuar.com"
return www+addr
def start():
url = 'http://www.xiaohuar.com/list-1-\d+.html'
lst = get_url_list(url)
for line in lst:
new_url = get_new_url(line)
if new_url == None:
continue
info = get_picture_url_info(new_url)
for girl in info:
addr = get_addr(girl)
print('addr:', addr)
down_pic(addr)
break
if __name__ == '__main__':
start()