爬妹子圖

利用 BeautifulSoup + Requests 爬取 妹子圖

import requests
import re, time, os
from bs4 import BeautifulSoup

urls = ["http://www.meizitu.com/a/list_1_{}.html".format(i) for i in range(1,31)]   #目前共92頁

headers1 = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',                               #妹子圖的請求頭
'Accept-Language':'zh-CN,zh;q=0.8',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'bdshare_firstime=1477909035413; Hm_lvt_a01ff1f91d0b936673f038453940cdb9=1477909035,1477909103; safedog-flow-item=F05CF6535242D231B430A78792F9D78D; CNZZDATA30056528=cnzz_eid%3D318212343-1488381613-null%26ntime%3D1488449174',
'Host':'www.meizitu.com',
'If-Modified-Since':'Tue, 21 Feb 2017 15:45:20 GMT',
'If-None-Match':"6470d82598cd21:196c",
'Referer':'http://www.meizitu.com/a/list_1_1.html',
'pgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}

headers2 = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',                              #圖片下載鏈接在另一個網站,有反爬,所以另建一個請求頭
'Accept-Language':'zh-CN,zh;q=0.8',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'__jsluid=a0a09999bc1cd95bb78e3cfc51c0b9d8; safedog-flow-item=2676F109CF0E6A11F1AB1ADC63D76F97',
'Host':'mm.howkuai.com',
'If-Modified-Since':'Sat, 19 Nov 2016 20:12:20 GMT',
'If-None-Match':"16808f3ba142d21:1527",
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}

def Get_url(url):
    links = []
    titles = []
    web_data = requests.get(url, headers=headers1)
    web_data.encoding = 'gb2312'                    #改為該網站編碼
    soup = BeautifulSoup(web_data.text, 'lxml')
    picture_websites_location = soup.find_all("div", class_="pic")  #首頁的鏈接存在這
    for i in range(len(picture_websites_location)):
        links.append(picture_websites_location[i].find_all(target="_blank")[0]["href"]) #該內容的鏈接全在這個標簽內,find_all返回列表,所以應該用list[0]操作
        # links.append(picture_websites_location[i].find_all(href=re.compile(".*?")).get("href"))  與上面一樣
    for i in range(len(picture_websites_location)):
        titles.append(picture_websites_location[i].find_all("img")[0]["alt"].strip('<b>').strip('</'))
        # 有的標題含有<b>...</b>,連用兩次strip去除,前面過程與取內容鏈接一致
    return links, titles            #返回內容鏈接與內容標題

def Get_picture_link(website, filename):            #傳入內容網址,即為圖片所在網址
    pictures = []
    titles = []
    os.mkdir(filename)              #用傳入的內容標題創建文件夾目錄,儲存對應內容的圖片
    time.sleep(4)                   #防止請求頻繁被封IP
    web_data = requests.get(website, headers= headers1)
    web_data.encoding = 'gb2312'
    soup = BeautifulSoup(web_data.text, 'lxml')
    links = soup.find_all(id = "picture")              #返回實際為只有列表[0],因為picture這標簽在里面只有一個
    links_real = links[0].find_all("img")              #圖片的鏈接都存在列表[0]里,先排除多余標簽再取出圖片地址
    for i in range(len(links_real)):
        pictures.append(links_real[i]["src"])
    for i in range(len(links_real)):
        titles.append(links_real[i]["alt"])
    for i in range(len(pictures)):
        time.sleep(2)
        picture = requests.get(pictures[i], headers=headers2)   #用requests下載圖片
        if picture.status_code == 200:
            a = os.getcwd()
            path = a + '\\' +filename +  '\\'+ titles[i] + '.jpg'  #對應的圖片放到對應的文件夾里
        open(path, 'wb').write(picture.content)
    print('完成了一個文件夾')


if __name__ == '__main__':
    for url in urls:
        pic, tit = Get_url(url)
        for i in range(len(pic)):
            Get_picture_link(pic[i], tit[i])

    #大網址——提取——>圖片所在網址>——提取——圖片鏈接


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前一篇寫了基礎的爬蟲,這篇我們就來爬圖片保存下來。?環境如上一篇scrapy 爬電影 抓取數據 Step1 首先還...
    EasonDev閱讀 378評論 0 0
  • 利用 selenium + PhantomJS 爬取 妹子圖 By The Way : 營養跟不上了
    交易狗二哈閱讀 769評論 0 0
  • 有個網站 http://www.meizitu.com/ 里面有很多妹子,所以就動了心思,是不是可以爬到我的本地來...
    豪哥的世界閱讀 782評論 3 0
  • 聲明:本文講解的實戰內容,均僅用于學習交流,請勿用于任何商業用途! 一、前言 強烈建議:請在電腦的陪同下,閱讀本文...
    Bruce_Szh閱讀 12,783評論 6 28
  • 利用 BeautifulSoup + Requests 爬取 煎蛋網 妹子圖 一、爬煎蛋網一頁圖片 此爬蟲只能爬取...
    交易狗二哈閱讀 1,102評論 0 2