使用正则表达式,取得点击次数,函数抽离


学会使用正则表达式

1. 用正则表达式判定邮箱是否输入正确。

rule = '^\w+@\w+.\w+'
mail = '121324koi@qqng.com'
rec = re.match(rule, mail)
if(rec):
    print(rec.group(0))
else:
    print('error')

  

2. 用正则表达式识别出全部电话号码。

t = '''学校办公室:020-82876130   招生电话:020-82872773
粤公网安备 44011602000060号    粤ICP备15103669号'''

rule = '\d{3}-\d{6,8}'
rec = re.findall(rule, t)
if(rec):
    for i in rec:
        print(i)
else:
    print('error')

  

3. 用正则表达式进行英文分词。re.split('',news)

4. 使用正则表达式取得新闻编号

import requests
import re

url = 'http://news.gzcc.cn/html/2018/xiaoyuanxinwen_0404/9183.html'
num = re.findall('\d{1,4}/\d{1,4}',url)
num = num[0].split('/')[1]
print(num)

结果:
9183

 

5. 生成点击次数的Request URL

6. 获取点击次数

res = requests.get('http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80'.format(num)) #生成点击次数
res.encoding='utf-8'
text = res.text

fi = re.findall('\d{1,4}',text)[-1]  #获取点击次数
print(fi)

 

7. 将456步骤定义成一个函数 def getClickCount(newsUrl):

8. 将获取新闻详情的代码定义成一个函数 def getNewDetail(newsUrl):

9. 取出一个新闻列表页的全部新闻 包装成函数def getListPage(pageUrl):

10. 获取总的新闻篇数,算出新闻总页数包装成函数def getPageN():

11. 获取全部新闻列表页的全部新闻详情。

import requests
import re
from bs4 import BeautifulSoup


# 获取点击次数
def click(url):
# urll = 'http://news.gzcc.cn/html/2018/xiaoyuanxinwen_0404/9183.html'
urll = url
num = re.findall('\d{1,4}/\d{1,4}', urll)
num = num[0].split('/')[1]
# print(num)
ress = requests.get('http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80'.format(num))
ress.encoding = 'utf-8'
text = ress.text
fi = re.findall('\d{1,4}', text)[-1]
return fi



#获取新闻详情
def getNewDetail(newsUrl):
url = newsUrl
res2 = requests.get(url)
res2.encoding = 'utf-8'
soup2 = BeautifulSoup(res2.text, 'html.parser')
info = soup2.select('.show-info')[0].text
info = info.lstrip('发布时间:').rstrip('点击:次')
# print(info)
time = info[:info.find('作者')].rstrip() # 发布时间
author = info[info.find('作者:') + 3:info.find('审核')].rstrip() # 作者
check = info[info.find('审核:') + 3:info.find('来源')].rstrip() # 审核
source = info[info.find("来源:") + 3:info.find('摄影')].rstrip() # 来源
clicknum = click(url)
print(time, author, check, source, clicknum, end="")
if (info.find("摄影:") > 0):
photogra = info[info.find("摄影:") + 3:] # 来源
print(photogra + '\n')
else:
print('\n')


#一个新闻列表页的全部新闻
def getListPage(Url):
url = 'http://news.gzcc.cn/html/xiaoyuanxinwen/'
res = requests.get(url)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser')

news = soup.select('li')
for new in news:
if len(new.select('.news-list-title')) > 0:
title = new.select('.news-list-title')[0].text # 标题
aurl = new.select('a')[0].attrs['href'] # URL

text = new.select('.news-list-description')[0].text #正文
print(title + '\n' + text + '\n' + aurl )
getNewDetail(aurl)


#获取总页数
def getPageN(url):
urll = url
res = requests.get(urll)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser')
news = soup.select('#pages')[0].select('a')[0].text
news = int(news.rstrip('条'))
page = news//10+1
return page
# print(page)



totalpage = getPageN('http://news.gzcc.cn/html/xiaoyuanxinwen/')
# print(page)
for i in [totalpage, totalpage+1]:
url = 'http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html'.format(i)
getListPage(url)

  

posted @ 2018-04-10 17:33  247李嘉嘉  阅读(162)  评论(0编辑  收藏  举报