摘要:根據帖子建立文件夾建立文件夾可以使用庫的方法,注意,如果是方法則只能創建一層目錄。最終代碼運行效果
經過前兩篇文章 http://segmentfault.com/a/1190000004288204 和 http://segmentfault.com/a/1190000004269037的測試,決定實現以下功能:
給定感興趣的貼吧首頁,自動獲取帖子的鏈接
進入獲取到的鏈接中,將帖子內的圖片鏈接提取出來
按照帖子的ID建文件夾,將帖子內圖片的鏈接下載為圖片保存到文件夾中
實現過程:
獲取帖子列表
以百度貼吧“壁紙吧”為例http://tieba.baidu.com/f?kw=%E5%A3%81%E7%BA%B8&ie=utf-8,通過分析該網頁源代碼,發現:
每一個帖子的鏈接都是
href="/p/xxxxxxxxxx"
再打開對應帖子的鏈接,發現該帖子正是
http://tieba.baidu.com/p/xxxxxxxxx
所以獲取文章鏈接的思路很簡單:
獲取到標題的href這個屬性的內容,前面加上http://tieba.baidu.com/就是最終的帖子鏈接:
LinkSelector = AirticleFilter.xpath("http://div[@class="threadlist_lz clearfix"]/div/a/@href")
獲取帖子中每個樓層所包含的圖片鏈接:
這里會有一個坑,如果你直接從chrome中審查元素,定位到圖片所在的xpath,有可能是獲取不到真正的鏈接的,而有可能獲取到“loading.gif”!這是因為,圖片在加載時比較慢,網頁先下載一個小的動畫圖片顯示loading,待下載完成之后再顯示真正的圖片。不過好在在每一個包含圖片的樓層中的頭部信息中都包含了文件的類型,圖片的大小,圖片的鏈接地址,以及圖片是否為用戶上傳的圖片等信息:
經過摸索,我們要提取的是包含有的節點信息,該節點中有圖片的實際鏈接src="http:XXXXXXXX"
BackGroundLink = BackGroundFilter.xpath("http://div[@class="l_post l_post_bright j_l_post clearfix "]") ImgSrc = etree.HTML(reply_info["content"]["content"]) ImgLink = ImgSrc.xpath("http://img[@class="BDE_Image"]/@src")
以上xpath首先獲取到樓層,然后獲取到樓層中的content信息,然后將content信息作為html文件再次分析,獲取到包含class="BDE_Image"的圖片的src。
根據帖子ID建立文件夾
建立文件夾可以使用os庫的mkdirs方法,注意,如果是mkdir方法則只能創建一層目錄。
def MakeDir(TargetDir,FolderName): new_path = os.path.join(TargetDir,FolderName) if(not os.path.isdir(new_path)): os.makedirs(new_path) os.chdir(new_path)
最終代碼:
#-*-coding:utf8-*- from lxml import etree import SaveLinkIntoFile import requests import re import os import GetTiebaImg def GetArticleLinks(url): TiebaUrlprefix = "http://tieba.baidu.com" html = requests.get(url) html = re.sub(r"charset=(/w*)", "charset=UTF-8", html.text) AirticleFilter = etree.HTML(html) #print(html) LinkSelector = AirticleFilter.xpath("http://div[@class="threadlist_lz clearfix"]/div/a/@href") for i in range(len(LinkSelector)): foldername = LinkSelector[i].strip().lstrip().rstrip("/").replace("/","") print(foldername) MakeDir("D:Python_Cache",foldername) LinkSelector[i] = TiebaUrlprefix + LinkSelector[i] GetTiebaImg.GetTiebaImg([LinkSelector[i]]) os.chdir("../") print(LinkSelector) return LinkSelector # print("the number of links:{0}".format(len(LinkSelector))) # for each in LinkSelector: # print("The links:{0}".format_map(each[0])) def MakeDir(TargetDir,FolderName): new_path = os.path.join(TargetDir,FolderName) if(not os.path.isdir(new_path)): os.makedirs(new_path) os.chdir(new_path) # print("the Current dir is:{0}".format(os.getcwd())) # os.chdir("../") # print("the Current dir is:{0}".format(os.getcwd())) if __name__ == "__main__": MakeDir("D:Python_Cache","Cache1") TiebaUrl = "http://tieba.baidu.com/f?kw=%E5%A3%81%E7%BA%B8&ie=utf-8" GetArticleLinks(TiebaUrl)
運行效果:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37727.html
摘要:背景介紹我大一的時候學校就開設了,但是并沒有好好學,基本等于是什么也不會,最近才開始看,所以本身也是摸著石頭過河,見諒心得講真的,爬蟲確實不像別人想象的那樣簡單,爬蟲首先要靜下心來,細心尋找目標網站的布局規律,最重要的是的變化,這是一個考驗 背景介紹 我大一的時候學校就開設了 python,但是并沒有好好學,基本等于是什么也不會,最近才開始看,所以本身也是摸著石頭過河,見諒... 心得...
摘要:楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,。本文來源知乎作者路人甲鏈接楚江數據提供網站數據采集和爬蟲軟件定制開發服務,服務范圍涵蓋社交網絡電子商務分類信息學術研究等。 楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...
摘要:在上一篇文章的基礎上增加獲取百度貼吧的頭像圖片的功能,使用到的技術為,,具體實現如下查看網頁源代碼測試網頁鏈接通過定位頭像的的代碼每一樓層的標簽是從樓層開始,直到定位到照片順序應該是提取信息通過一步步獲取到這一層,提取到這個標簽中的就可以獲 在上一篇文章的基礎上增加獲取百度貼吧的頭像圖片的功能,使用到的技術為XPath,Requests,具體實現如下: 1. 查看網頁源代碼測試網頁鏈接...
摘要:河北陽光理政投訴板塊開始擼代碼今天再次嘗試使用一個新的模塊,它可以配合快速解析文檔,官網網站利用安裝,如果安裝失敗,可以在搜索引擎多搜搜,內容很多,有解決方案。 1.河北陽光理政投訴板塊-寫在前面 之前幾篇文章都是在寫圖片相關的爬蟲,今天寫個留言板爬出,為另一套數據分析案例的教程做做準備,作為一個河北人,遵紀守法,有事投訴是必備的技能,那么咱看看我們大河北人都因為什么投訴過呢? 今天要...
閱讀 1148·2021-11-25 09:43
閱讀 2966·2019-08-30 15:54
閱讀 3349·2019-08-30 15:54
閱讀 2992·2019-08-30 15:44
閱讀 1624·2019-08-26 12:18
閱讀 2256·2019-08-26 11:42
閱讀 876·2019-08-26 11:35
閱讀 3296·2019-08-23 18:22