码迷,mamicode.com
首页 > 其他好文 > 详细

【作业】爬虫所有校园新闻

时间:2017-10-12 19:21:21      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:com   php   爬取   web   url   完整   info   记录   format   

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、完成自己所选其他主题相应数据的爬取工作。

 

【作业】爬虫所有校园新闻

标签:com   php   爬取   web   url   完整   info   记录   format   

原文地址:http://www.cnblogs.com/young27/p/7657310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!