初涉爬蟲時的requests庫---爬取貼吧內容
阿新 • • 發佈:2018-12-11
requests庫在爬蟲的實踐開發運用中較為常用,實現HTTP請求協議時方法簡單,操作方便,易於實現。對於一般的靜態網頁,都可以方便抓取想要的內容,比起scrapy等框架有明顯的優勢,爬取定向的簡單內容,是極好的。
下面就是運用requests模組,實現一個簡單的爬取貼吧網頁的爬蟲程式。該栗子建立一個類,方便有需要時直接呼叫繼承。
閒言少敘,上菜!!!接程式碼!!!
看著程式碼挺多,去掉註釋,所剩無幾,這也是python魅力所在,哈哈哈!!!
import requests class Tiebaspider: def __init__(self,tieba_name_crawl): #初始化必要引數,完成基礎的設定 #貼吧名稱 self.tiebaname = tieba_name_crawl #種子連結 self.url_base = 'https://tieba.baidu.com/f?kw='+ tieba_name_crawl +'&ie=utf-8&pn={}' #請求頭資訊 self.hearders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'} #獲得要的頁面下載列表 def make_list_down(self): #列表生成式 返回值是下載連結,帶有頁碼 # return [self.url_base.format(i) for i in range(3)] #注意注意注意!!!貼吧的原始碼HTML是50條翻一頁,pn=50,想要獲得第二頁pn值要大於50,依次類推 return [self.url_base.format(i) for i in [0,55,102]] #獲得下載的頁面內容 def download_url(self,url_str): #獲得頁面請求響應 使用request.get方法下載指定頁面,並返回頁面的結果 #url_str下載連結 result = requests.get(url_str,headers =self.hearders) # print(result.text) #返回下載的頁面內容 return result.content #儲存下載的內容 def save_result(self,result,page_num): #路徑(相對/絕對都可以) file_path = 'D:/4spider/spider_review02/review02/download2/{}--第{}頁.html'.format(self.tiebaname,page_num) with open(file_path,'wb') as f: f.write(result) #執行邏輯,程式執行的順序 def run(self): #呼叫make_list_down()方法 url_list = self.make_list_down() #url_str在url_list中 迴圈遍歷 for url_str in url_list: #呼叫download_url() 方法 result_str = self.download_url(url_str) #頁碼 索引值在獲得的頁碼列表中 迴圈加1 p_num = url_list.index(url_str) + 1 #呼叫save_result()方法儲存,儲存下載的頁面 self.save_result(result_str,p_num) if __name__ =="__main__": #“李毅”要爬取的貼吧名稱 tieba_spider = Tiebaspider("李毅") tieba_spider.run()
注意點:::
1.學好爬蟲的前提HTML頁面要666,對css,js,json,ajax等前端頁面的知識要會分析;比如此例中,要對貼吧原始碼進行分析,檢視下一頁的樣式,不然無法實現翻頁功能,也就是隻能獲得第一頁;
2.分析這種簡單爬蟲時,要從run方法入手,它是程式的主要實現邏輯;
3.儲存的路徑必須是程式能夠找到的路徑;
4.最好運用面向物件的方法來解決問題,建立類,封裝函式,也就是造輪子,方便下次要實現類似的需求時,作為參考。