Python爬蟲教程:爬取百度貼吧
阿新 • • 發佈:2018-12-11
貼吧爬取
寫程式碼前,構思需要的功能塊;寫程式碼時,把各個功能模組名提前寫好
初始化
初始化必要引數,完成基礎設定 爬取百度貼吧lol吧:爬取地址中的get引數須傳遞(可以指定不同主題的貼吧和頁碼)
- 主題名
- 初始網址
- 請求頭
生成網址
生成每一頁的路由地址
- 根據列表生成式生成多個頁面的地址
下載
get請求給每一頁的地址,爬取頁面
儲存
儲存爬取結果到檔案中,把每一頁爬取結果寫入到對應名字的檔案中
控制流程
將以上爬取操作封裝到run函式中,方便外部物件呼叫,以後會在此新增多執行緒
- 生成要爬取的每一頁的路由地址
- 通過for迴圈遍歷每一個路由地址
- 對每個路由地址進行爬取和獲取頁碼操作,並進行儲存
原始碼
import requests ''' 有需要Python學習資料的小夥伴嗎?小編整理【一套Python資料、原始碼和PDF】,感興趣者可以加學習群:548377875,反正閒著也是閒著呢,不如學點東西啦~~ ''' class TiebaSpider: def __init__(self, tieba_name_crawl): """ 初始化必要引數,完成基礎設定 爬取百度貼吧lol吧:爬取地址中的get引數須傳遞(可以指定不同主題的貼吧和頁碼) """ self.tieba_name = tieba_name_crawl self.url_base = 'https://tieba.baidu.com/f?kw=' + tieba_name_crawl + '&ie=utf-8&pn={}' self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'} def make_url(self): """ 生成每一頁的路由地址 :return:(列表生成式) """ return [self.url_base.format(i) for i in range(4)] def download_url(self, url_str): """ get請求給每一頁的地址,爬取頁面 :param url_str: 每一頁的路由地址 :return: 爬取的結果 """ result = requests.get(url_str, headers=self.headers) return result.text def save_result(self, result, page_num): """ 儲存爬取結果到檔案中 :param result: 每一頁的爬取結果 :param page_num: 頁碼,方便分類儲存 :return: 把每一頁爬取結果寫入到對應名字的檔案中 """ # with open('./download/lol' + str(page_num) + '.html', 'ab') as f: # f.write(result.encode('utf-8')) file_path = './download/{}~第{}頁.html'.format(self.tieba_name,page_num) with open(file_path,'wb') as f: f.write(result.encode('utf-8')) def run(self): """ 將以上爬取操作封裝到run函式中,方便外部物件呼叫,以後會在此新增多執行緒 · 生成要爬取的每一頁的路由地址 · 通過for迴圈遍歷每一個路由地址 · 對每個路由地址進行爬取和獲取頁碼操作,並進行儲存 :return: """ url_lists = self.make_url() for url_str in url_lists: result_str = self.download_url(url_str) p_num = url_lists.index(url_str) + 1 self.save_result(result=result_str,page_num=p_num) if __name__ == '__main__': tieba_spider = TiebaSpider('lol') tieba_spider.run()