爬虫应用:爬取新闻

import requests  #导入requests库
import re  #导入正则表达式库
#伪装正常访问
user = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
    #打开浏览器输入:“about:version”,查看“用户代理”,即本机的user-agent
}

url = "https://www.sit.edu.cn/_t470/12991/list1.htm"   
#print(url)    #为了测试是否成功进行打印查看
response = requests.get(url,headers = user)       #用requests库的get函数访问网页,用headers进行伪装
#print(response.text)    #打印网页
html = response.content.decode('utf-8')   #用文本显示访问网页得到的内容
#print(html)  #打印网页内容,以便于使用正则表达式.
#用正则表达式来获得每个文件的网址
urls = re.findall('\'>(.*)</a></span>',html)   #用正则表达式获得新闻标题
urlt = re.findall('<span class="news_meta">(.*)</span>',html)  #用正则表达式获得新闻发布时间
#urls[2]=urls[2]+" "+urlt[2]
for i in range(len(urls)): #整合新闻标题和发布时间
   urls[i]=urls[i]+" "+urlt[i]
urls = "\n".join(urls)    #将列表转化为字符串 
print(urls)   #进行打印查看

此种操作,可以爬取新闻标题,并且保留时间信息

 若保存为以新闻标题为文件名的txt文件,其内容为新闻文字信息,代码如下:

import requests  #导入requests库
import re  #导入正则表达式库
#伪装正常访问
user = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
    #打开浏览器输入:“about:version”,查看“用户代理”,即本机的user-agent
}

url = "https://www.sit.edu.cn/_t470/12991/list1.htm"   
#print(url)    #为了测试是否成功进行打印查看
response = requests.get(url,headers = user)       #用requests库的get函数访问网页,用headers进行伪装
#print(response.text)    #打印网页
html = response.content.decode('utf-8')   #用文本显示访问网页得到的内容
#print(html)  #打印网页内容,以便于使用正则表达式.
#用正则表达式来获得每个文件的网址
#urls = re.findall('\'>(.*)</a></span>',html)   #用正则表达式获得新闻标题
#urlt = re.findall('<span class="news_meta">(.*)</span>',html)  #用正则表达式获得新闻发布时间
#for i in range(len(urls)): #整合新闻标题和发布时间
#   urls[i]=urls[i]+" "+urlt[i]
#urls = "\n".join(urls)    #将列表转化为字符串 
#print(urls)   #进行打印查看
url_next = re.findall('<span class="news_title"><a href=\'(.*)\' target=',html)  #提取网页中的每条新闻具体网址
#url_next = "\n".join(url_next) 
#print(url_next)   #为了测试是否成功进行打印查看
#用for语句来一次访问每个文件的网址
for ur in (url_next):  #用for语句来实现依次访问每个文件的网址
	#print("https://www/sit.edu.cn"+ur)
	response_ni = requests.get("https://www.sit.edu.cn"+ur,headers = user)  #用变量response_ni保存访问网址后获得的信息
	response_htm = response_ni.content.decode('utf-8')  #用'utf-8'的编码模式来记录网址内容,防止出现中文乱码
      #print(response_htm)
	bt = re.findall('<h1 class="arti_title">(.*)</h1>',response_htm)  #用正则表达式来获得新打开网页的标题
	bt = "\n".join(bt)  #将获得的标题由列表转换为字符串
	#print(bt)
	nr = re.findall('<p style=(.*)</p><p',response_htm) #内容
	nr="\n".join(nr)
	#print(nr)
	nr_new=re.sub('"text-align:justify;font-size:16px;">','',nr) #去掉控制字符
	nr_new=re.sub('"font-size:16px;text-align:justify;">','',nr_new) #去掉控制字符
	nr_new=re.sub('"text-align:center;">','',nr_new) #去掉控制字符
	nr_new=re.sub('"text-align:justify;">','',nr_new) #去掉控制字符
	nr_new=re.sub('<img(.*)/>','',nr_new) #去掉控制字符
	nr_new=re.sub('<p style=','',nr_new) #去掉控制字符
	nr_new=re.sub('"font-size:16px;text-align:right;">','',nr_new) #去掉控制字符
	nr_new=re.sub('<span style=','',nr_new) #去掉控制字符
	nr_new=re.sub('"text-align:right;font-size:16px;">','',nr_new) #去掉控制字符
	nr_new=re.sub('"font-size:16px;">','',nr_new) #去掉控制字符
	nr_new=re.sub('[<a-z\/>]','',nr_new) #去掉html控制字符
	nr_new=re.sub('\s','',nr_new) #去除空格
   	#print(nr_new)
	#保存每个文件
	print("正在爬取保存,请勿关闭……")
	with open( bt + '.txt','w+', encoding='utf-8') as f:  #用w格式新建文件,并且用file_name命名,再加上#“.txt”后缀,文字编码格式'utf-8'
		f.write(str(nr_new))  #将网页内容nr用字符串的格式写入文本
		f.close()    #将文件关闭保存

需要注意的是,新闻内容格式不统一,内容也比较复杂,有多种控制字符,因此要进行处理,去掉html的有关控制符。txt内容全部为字符,去掉了空格。

猜你喜欢

转载自blog.csdn.net/weixin_41784968/article/details/129721791