【作業】爬蟲所有校園新聞
阿新 • • 發佈:2017-10-12
時間類 其中 網址 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、完成自己所選其他主題相應數據的爬取工作。
【作業】爬蟲所有校園新聞