python爬取ppt_Python-爬蟲13-實作-3-爬取PPT網站(完整程式碼)

爬取PPT網站(完整程式碼)

import requests

import time

import json

from bs4 import BeautifulSoup

domain_url = 'https://www.ptt.cc'

def get_ppt_page(url):

resp = requests.get(

url=url,

cookies={'over18': '1'} # 紀錄cookies 是否年滿18歲

)

if resp.status_code != 200:

print('Invalid url:', resp.url)

return None

else:

return resp.text

def get_pageinfo(resdata,today):

soup = BeautifulSoup(resdata, 'html5lib')

#取得上一頁href

paging_div = soup.find('div', 'btn-group btn-group-paging')

#print(paging_div)

prev_url = paging_div.find_all('a')[1]['href']

#print(prev_url)

pptdata = [] # 儲存取得的文章資料

date_divs = soup.find_all('div', 'r-ent')

#print(date_divs) #先抓取

for d in date_divs:

today_data = d.find('div', 'date').text.strip() == today

#print(today_data)

if today_data : #判斷文章是否是今天發佈

# 取得推文數

push_count = d.find('div', 'nrec').text

print(push_count)

push_num = 0

if push_count:

try:

push_num = int(push_count) # 轉換字串為數字

except ValueError:

# 若轉換失敗,可能是'爆'或 'X1', 'X2', ...

# 若不是, 不做任何事,push_num 保持為 0

if push_count == '爆':

push_num = 00

elif push_count.startswith('X'):

push_num = 99

print("推文數",push_num)

# 取得文章連結

if d.find('a'): # 有超連結,代表文章存在

href = d.find('a')['href']

print("標題連結",href)

title = d.find('a').text

print("標題",title)

author = d.find('div', 'author').text if d.find('div', 'author') else '' #作者有可能是空的

print("作者",author)

pptdata.append({

'title': title,

'href': href,

'push_num': push_num,

'author': author

})

return pptdata,prev_url

if __name__ == '__main__':

ppt_page = get_ppt_page(domain_url + '/bbs/Gossiping/index.html')

if ppt_page:

#print(domain_url + '/bbs/Gossiping/index.html')

today = time.strftime("%m/%d").lstrip('0') # 今天日期, 去掉開頭的 '0' 以符合 PTT 網站格式

pptdata,prev_href = get_pageinfo(ppt_page,today)

print(domain_url+prev_href)

print(pptdata)

articles=[]

#回到上一頁繼續尋找是否有今日文章

while pptdata: # 若目前頁面有今日文章則加入 articles,並回到上一頁繼續尋找是否有今日文章

articles += pptdata

pptdata = get_ppt_page(domain_url + prev_href)

pptdata, prev_url = get_pageinfo(pptdata, today)

# 計算今天有幾篇文章

print('今天有', len(pptdata), '篇文章')

hot = 3 #預設推文數要大於這個值,才算熱門文章

print('熱門文章(> %d 推):' % (hot)) #提示文字

for a in pptdata:

if int(a['push_num']) > hot: #如果推文數大於 hot

print(a['title']) #印出標題

with open('ppt1.json', 'w', encoding='utf-8') as f:

json.dump(pptdata, f, indent=10, sort_keys=True, ensure_ascii=False)

#縮排, 是否排序Key ,編碼

YiruAtStudio - 電腦影音教學

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值