作业爬虫所有校园新闻
Posted 27杨华星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业爬虫所有校园新闻相关的知识,希望对你有一定的参考价值。
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、完成自己所选其他主题相应数据的爬取工作。
以上是关于作业爬虫所有校园新闻的主要内容,如果未能解决你的问题,请参考以下文章