1. 程式人生 > >【作業】爬蟲所有校園新聞

【作業】爬蟲所有校園新聞

時間類 其中 網址 model Coding ebs [0 earch span

1、完成所有校園新聞的爬蟲

(1)獲取單條新聞的#標題#鏈接#時間#來源#內容 #點擊次數,並包裝成一個函數。

(2)獲取一個新聞列表頁的所有新聞的上述詳情,並包裝成一個函數。

(3)獲取所有新聞列表頁的網址,調用上述函數。

(4)完成所有校園新聞的爬取工作。

 1 #廣州商學院新聞爬蟲
 2 import requests
 3 import re
 4 from bs4 import BeautifulSoup
 5 from datetime import datetime
 6 
 7 webs = "http://news.gzcc.cn/html/xiaoyuanxinwen/"
 8 res = requests.get(webs)
9 res.encoding = utf-8 #編碼轉換,避免中文亂碼輸出 10 soup = BeautifulSoup(res.text,"html.parser") #html.parser是指定解析器 11 12 #函數功能:獲取網頁的頁數 13 def getpage(): 14 lists = int(soup.select(.a1)[0].text.rstrip("")) #獲取新聞的總條數 15 page = lists//10+1 #計算獲取新聞的頁數,每頁新聞有10條記錄 16 return page 17 18 #函數功能:輸出新聞的詳細內容
19 def getdetail(url_detail): 20 resd =requests.get(url_detail) 21 resd.encoding = utf-8 22 soupd = BeautifulSoup(resd.text,html.parser) 23 return (soupd.select(.show-content)[0].text) 24 25 #函數功能:輸出新聞的時間,類型為datetime 26 def gettime(url_time): 27 resd = requests.get(url_time)
28 resd.encoding = utf-8 29 soupd = BeautifulSoup(resd.text,html.parser) 30 tx1 = soupd.select(.show-info)[0].text 31 tx2 = "{0:.24}".format(tx1[5:24]) 32 time1 = datetime.strptime(tx2,%Y-%m-%d %H:%M:%S) #把字符串類型轉換成時間類型 33 return time1 34 35 #函數功能:輸出新聞的點擊次數,類型為int 36 def getclick(url_click): 37 id = re.search(_(.*).html,url_click).group(1).split("/")[1] 38 #用正則表達式進行搜索匹配,並返回第一次匹配成功的結果元組,最後用/將元組分開進行取值 39 url_num = (http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80.format(id)) 40 #將獲取到的網頁id值填入該頁面 41 click = int(requests.get(url_num).text.split(.)[-1].lstrip(".html(‘").rstrip("‘);")) 42 #獲取頁面內容後用點號進行元組內容分隔,然後去掉前後的一些匹配內容後取得點擊數的值 43 return click 44 45 #函數功能:輸出新聞的相關信息 46 def shownews(url): 47 res = requests.get(url) 48 res.encoding = utf-8 49 soup = BeautifulSoup(res.text,html.parser) 50 for news in soup.select(li): 51 if len(news.select(.news-list-title))>0: 52 #如果存在新聞列表標題的話(有內容則會大於0) 53 title = news.select(.news-list-title)[0].contents[0] 54 #輸出標題的內容 55 sorce = news.select(.news-list-info)[0].contents[1].text 56 #用列表列出子標簽後取出第二個元素的內容(來源) 57 newsurl = news.select(a)[0][href] 58 #輸出a標簽中的href內容(即網址) 59 time=news.select(.news-list-info)[0].span.text 60 #用列表列出子標簽後取出第一個元素的內容(時間) 61 detail = getdetail(newsurl) 62 #輸出詳細內容 63 clicknum = getclick(newsurl) 64 #輸出點擊次數 65 print(title,\n,發布時間:,time,來源:,sorce,點擊次數:,clicknum,\n,網站鏈接:,newsurl,\n,detail) 66 #輸出新聞標題、時間、來源、點擊次數、鏈接和內容 67 68 shownews(webs) #輸出新聞的第一頁 69 for i in range(2,getpage()+1): #循環輸出往後的頁 70 url_nextnew = (http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html.format(i)) 71 shownews(url_nextnew)

(由於內容過多,只展示前兩頁的標題等內容列表和其中一個新聞的完整信息)

技術分享

技術分享

2、完成自己所選其他主題相應數據的爬取工作。

【作業】爬蟲所有校園新聞