編了一套爬蟲美女圖的一組代碼,請大神指點一二;

# -*- coding: utf-8 -*-#coding=utf-8#_author_='Lucky';#date:  2018/12/19import  osimport reimport  requestsfrom lxml import etreefrom bs4 import BeautifulSoupdef get_main():#定義最外層的函數    for result  in range(200):#由於目錄有175頁,因此定義這個區間        if result ==0:            url = f"http://www.mm131.com/xinggan"        else:            url = f"http://www.mm131.com/xinggan/list_6_{result}.html"#發現規律地址都是後面加_數字        res = requests.get(url)#請求上面網址返回給變量res        print(res)        res.encoding = res.apparent_encoding  # 將變量進行編碼轉換 沒有實際意義        soup = BeautifulSoup(res.text, "lxml")  # 解析後的內容給soup對象        tr_soup = soup.find_all("dd")#發現目錄主圖都是在dd標籤下面        # print(tr_soup)        get_url(tr_soup,result)#調用下面的函數 傳的參數是上面篩選出來的 dd標籤中的內容def get_url(defaul,res):#目錄中的二層url地址生成    for i in defaul:        if i.find("a"):#查找a標籤下的全部內容            text = i.get_text()#若是找到就提取文本到前面變量            print(text)            link = i.find("a").get("href")#將標籤a下面href的值url單獨給變量link列表            print(link)            if 'html' in link:#尤爲注意這裏,爲了防止爬到的地址不存在html字符串,(也就是說爬的地址不是圖片url地址)加次條件                link_re = '/.+?\.'  # 先定義個正則表達式,爲了後面作url拼接使用,實際是找出這個表達式的值                end_link = re.compile(link_re)  # 編譯上面的表達式後才能被python識別                end_url = re.findall(end_link, link)  # 找出link中符合正則表達的內容                print('end_url=', end_url)                new = end_url[1].strip('.')  # end_url[1]的值中有個.在拼接url時沒法拼接,故用strip刪除                for num in range(2, 55):  # 每一個目錄下基本上都是存在55個子圖片,故用區間                    end2_link = new + '_%d' % num  # 字符串拼接                    web = ('http://www.mm131.com' + end2_link + '.html')  # 造成要訪問的url                    print(web)                    get_endurl(web, num, text)def get_endurl(web, no, text):#末端請求Url和圖片保存寫入    headers = {        'Referer': f'{web}',        'User-Agent': 'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'    }#請求頭    res = requests.get(web)#訪問對應Url,返回信息到res    result = etree.HTML(res.content)#經過etree.HTML的函數講res進行解析,這樣才能經過xpath來找到圖片    # print(etree.tostring(result).decode("utf-8"))    img_list = result.xpath("//div[@class='content-pic']/a/img/@src")#將全部@src圖片地址放到列表中    print(img_list)    for img in img_list:#遍歷上面的列表        rimage = requests.get(img, headers=headers)#將每次遍歷到的圖片src,返回給rimage        with open(f'img2/{text}_{no}.jpg', 'wb') as f:#打開Img文件夾保存定義的文件名,            f.write(rimage.content)if __name__ == '__main__':    get_main()
相關文章
相關標籤/搜索