1. 程式人生 > >python爬取百度貼吧指定內容

python爬取百度貼吧指定內容

環境:python3.6

1:抓取百度貼吧—linux吧內容 基礎版 抓取一頁指定內容並寫入檔案

萌新剛學習Python爬蟲,做個練習
貼吧連結: http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn=0
解析原始碼使用的是BeautifulSoup
關於BeautifulSoup: 可以直接檢視官方文件:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
檔案儲存使用json的方式
當然你可以儲存成txt檔案
廢話不多說 直接上程式碼

'''
抓取百度貼吧---linux吧內容
基礎版 抓取一頁指定內容並寫入檔案
爬蟲線路: requests - pyquery
Python版本: 3.6
'''

import requests
import json
from bs4 import BeautifulSoup


# 用於傳送請求,獲得網頁原始碼以供解析
def start_requests(url):
    r = requests.get(url)
    return r.content


# 解析內容
def parse(text):
    soup = BeautifulSoup(text, 'lxml')
    infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
    # 建立一個列表儲存所有結果
    result_list = []
    for info in infos[1:]:
        # 建立一個字典將所有資訊存入字典中
        mydict = {}
        mydict['title'] = info.find('a', class_='j_th_tit').text.strip()    # 帖子標題
        mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']  # 帖子連結
        mydict['author'] = info.find('a', class_='frs-author-name').text.strip()    # 帖子作者
        mydict['time'] = info.find('span', class_='pull-right').text    # 發表時間
        result_list.append(mydict)
    return result_list


# 將資料寫入json檔案
def write_json(result):
    s = json.dumps(result, indent=4, ensure_ascii=False)
    with open('tieba.json', 'w', encoding='utf-8') as f:
        f.write(s)


def main():
    # 貼吧連結
    url = 'http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn=0'
    text = start_requests(url)
    result = parse(text)
    write_json(result)


# 一般做法
if __name__ == '__main__':
    main()

檔案內容:
在這裡插入圖片描述

2:抓取百度貼吧—linux吧內容 升級版 抓取指定頁內容並寫入檔案 多頁抓取之構造url

'''
抓取百度貼吧---linux吧內容
升級版 抓取指定頁內容並寫入檔案
多頁抓取之構造url
爬蟲線路: requests - pyquery
Python版本: 3.6
'''

import requests
import json
from bs4 import BeautifulSoup


# 用於傳送請求,獲得網頁原始碼以供解析
def start_requests(url):
    r = requests.get(url)
    print(111)
    return r.content


# 解析內容
def parse(text):
    soup = BeautifulSoup(text, 'lxml')
    infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
    for info in infos[1:]:
        mydict = {}
        mydict['title'] = info.find('a', class_='j_th_tit').text.strip()
        mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']
        mydict['author'] = info.find('a', class_='frs-author-name').text.strip()
        mydict['time'] = info.find('span', class_='pull-right').text
        result_list.append(mydict)


# 將資料寫入json檔案
def write_json(result):
    s = json.dumps(result, indent=4, ensure_ascii=False)
    with open('all_tieBa.json', 'w', encoding='utf-8') as f:
        f.write(s)


def main():
    for i in range(10):
        url = 'http://tieba.baidu.com/f?kw=linux&ie=utf-8&pn={}'.format(i * 50)
        text = start_requests(url)
        parse(text)
    write_json(result_list)
    print('寫入完成')


# 一般做法
if __name__ == '__main__':
    result_list = []
    main()

3:抓取百度貼吧—linux吧內容 升級版 抓取所有頁內容並寫入檔案 多頁抓取之翻頁

這裡要抓取的內容已經很多了,速度會很慢,萌新還不會通過其他技術來加速下載速度

'''
抓取百度貼吧---linux吧內容
升級版 抓取所有頁內容並寫入檔案
多頁抓取之翻頁
爬蟲線路: requests - pyquery
Python版本: 3.6
'''

import requests
import json
from bs4 import BeautifulSoup


# 用於傳送請求,獲得網頁原始碼以供解析
def start_requests(url):
    r = requests.get(url)
    return r.content


# 解析內容
def parse(text):
    """
       翻頁原理是爬取一頁的資訊的同時,把下一頁的url也爬取到,再對抓取到的這個url進行爬取。這種方法適用於有“下一頁”
       標籤的網站,而且一般是網頁url無法構造的時候才用這種方法。
        用這種方法要注意對有無下一頁進行判斷
       """
    soup = BeautifulSoup(text, 'lxml')
    infos = soup.find_all('li', attrs={'class': 'j_thread_list'})
    for info in infos[1:]:
        mydict = {}
        mydict['title'] = info.find('a', class_='j_th_tit').text.strip()
        mydict['link'] = "http://tieba.baidu.com/" + info.find('a', class_='j_th_tit')['href']
        mydict['author'] = info.find('a', class_='frs-author-name').text.strip()
        mydict['time'] = info.find('span', class_='pull-right').text
        result_list.append(mydict)
    # 此處獲取下一頁的連結物件
    next_page = soup.find('a', class_='next')
    if next_page:
        next_url = 'http:'+next_page['href']
        print(next_url)
        text = start_requests(next_url)
        parse(text)


# 將資料寫入json檔案
def write_json(result):
    s = json.dumps(result, indent=4, ensure_ascii=False)
    with open('tieba3.json', 'w', encoding='utf-8') as f:
        f.write(s)


def main():
    text = start_requests(base_url)
    parse(text)
    write_json(result_list)
    print('寫入完成')


# 一般做法
if __name__ == '__main__':
    base_url = 'http://tieba.baidu.com/f?ie=utf-8&kw=linux&fr=search&red_tag=s0376598528'
    result_list = []
    main()

執行程式碼:
在這裡插入圖片描述

總結到此為止 -->over