1. 程式人生 > >Python爬蟲系列之百度貼吧爬取

Python爬蟲系列之百度貼吧爬取

今天給的一個爬蟲小事例,貼吧段子爬取這樣一個小功能,資料呢僅僅娛樂,沒有惡意想法

若有侵權,請私信刪除

  • 此次用到的一個解析庫Beautiful Soup,更輕量簡單地對資料進行解析,已獲得目標資料
  • 貼吧做的還是比較好,有一定的反爬機制,所以我們也應該有一定的應對措施,具體對應我們requests獲取到的資料對應頁面原始碼,通過觀察發現數據的是否非同步與註釋等等反爬問題
  • 以下是程式碼部分
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import requests
import re
import
time import urllib.parse ''' Author:王磊 Time :2018/11/27 20:22:36 ''' header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"} def getHTML(url): ''' 通過url獲取html :param url: :return:htmlStrs ''
' res = requests.get(url, headers=header) html = res.content.decode('utf-8', 'ignore') html = html.replace("<!--", "") html = html.replace("-->", "") return html def parseSaveData(html): ''' 通過html程式碼解析資料並儲存 :param html: :return:None ''' soup = BeautifulSoup
(html, 'html.parser') # req = re.compile(r'<span.*?class="tb_icon_author.*?".*?>.*?</span>', re.S) # print(re.findall(req, html)) # 每條帖子資料 uls = soup.findAll('li', attrs={"class": re.compile(r'j_thread_list.*?')}) lens = len(uls) with open('C:\\Users\\asus\\Desktop\\pc\\text\\tieba.txt', 'a', encoding='gbk') as f: for i in range(lens): Utitle = uls[i].findAll('a', attrs={"rel": re.compile(r'noreferrer.*?')})[0]['title'] Uauthor = uls[i].findAll('span', attrs={"class": re.compile(r'tb_icon_author.*?')})[0]['title'] print(Utitle) print(Uauthor) print("*" * 50) Utitle = (Utitle + '\r\n').encode("GBK", 'ignore').decode('gbk') Uauthor = (Uauthor + '\r\n').encode("GBK", 'ignore').decode('gbk') f.write(Utitle) f.write(Uauthor) f.write("*" * 50 + '\r\n') def getPages(html): ''' 通過html獲取當前貼吧總帖子頁數 :param html: :return: pageNums ''' soup = BeautifulSoup(html, 'html.parser') endPages = soup.findAll('a', attrs={"class": re.compile(r'last.*?pagination-item.*?')}) return int(urllib.parse.urlparse('http://' + endPages[0]['href'])[4].split("=")[3]) def main(): ''' 入口函式 :return:None ''' name = urllib.parse.quote('電子科技大學成都學院') url = 'http://tieba.baidu.com/f?kw=' + name + '&ie=utf-8&pn=0' # 獲取資料 html = getHTML(url) # 獲取頁面數 pages = getPages(html) # 迴圈獲取頁資料並存儲 index = 0 for i in range(pages): url = 'http://tieba.baidu.com/f?kw=' + name + '&ie=utf-8&pn=' + str(index) #分析儲存資料 parseSaveData(html) index += 50 time.sleep(3) if __name__ == '__main__': main()

☞點選這裡與我探討☚

♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
♪♪後續會更新系列基於Python的爬蟲小例子,歡迎關注。♪♪
♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪