Python爬蟲系列之百度貼吧爬取
阿新 • • 發佈:2018-11-28
今天給的一個爬蟲小事例,貼吧段子爬取這樣一個小功能,資料呢僅僅娛樂,沒有惡意想法
若有侵權,請私信刪除
- 此次用到的一個解析庫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的爬蟲小例子,歡迎關注。♪♪
♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪