使用正则表达式,取得点击次数,函数抽离
学会使用正则表达式
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)