1.语言:Python3
2.需要的库:urllib,re(正则)
3.业务:爬取新浪新闻首页所有新闻信息,保存为本地文件
4.代码实现:
import urllib.request#处理并发送请求包
import urllib.error#异常处理
import re#正则表达式
#发送http请求,并获取新浪首页所有信息
data=urllib.request.urlopen("http://news.sina.com.cn/").read()
#确定数据长度
print(len(data))
#数据编码为utf-8,避免出现乱码
data=data.decode("utf-8","ignore")#出现转码异常时忽略
#定义正则表达式,用户筛选首页新闻数据
‘’’查看页面源码,提取统一数据格式:href="https://news.sina.com.cn/c/2019-05-15/doc-ihvhiews1919270.shtml"
‘’’
pat='href="(https://news.sina.com.cn/.*?)"'
#进行正则匹配,筛选有用数据,生成集合
allurl=re.compile(pat).findall(data)
#遍历集合,查看数据是否正常
for i in range(0,len(allurl)):
print(allurl[i])
#确定无异常,表明正则表达式无误,进行数据落地
for i in range(0,len(allurl)):
#异常处理,避免崩溃
try:
print("第"+str(i)+"次爬取")
#逐个提取url
thisurl=allurl[i]
#新建本地空白文件地址,根据脚标自动递增
file="E:/sinanews/"+str(i)+".html"
#数据获取并落地,含文件流关闭
urllib.request.urlretieve(thisurl,file)
print("---成功---")
except urllib.error.URLError as e:
#URLError 取代 HTTPError处理
#根据attr是否存在属性,判断后取值
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
#打完收工!
!!!完美!!!!