python练习系列一:爬取新浪新闻练习
程序员文章站
2022-05-02 22:03:47
...
今日学习从新浪新闻网页中,爬取所有的该页面网页信息,现将学习思路记录如下:
第一步,导入模块,请求,正则,异常处理
import urllib.request
import re
import urllib.error
主要应用 urllib 和 re两个模块,re负责处理筛选数据,urllib模块负责收集读取并写入数据。
第二步,读取新浪新闻网站数据
url = urllib.request.urlopen("http://news.sina.com.cn/").read()
该过程要记得后面一定要进行read()读取,或者在下一行也要进行读取,才能进行下一步转码动作。
第三步,进行转码,由于一般网站是 UTF-8码,需要解码成UNICODE,方能显示中文。
data = url.decode("UTF-8","ignore")
第四步,利用正则,筛选数据
首先,定义需要筛选的字段,从源代码中找出要筛选的字段,再利用正则语法进行处理
pat = 'href="(http://news.sina.com.cn/.*?)"'
对data数据进行正则字段筛选处理allurl = re.compile(pat).findall(data)
第五步,利用for循环进行文件写入通过try语句,进行异常处理
再通过open语句,创建和写入文件
在每次读取数据并写入成功后,打印提示
for i in range(0,len(allurl)):
try:
print("第" + str(i) + "次爬取")
#创建文件
file = "F:/sinanews/news/" + str(i) + ".html"
#获取每次所得的网址
urll = allurl[i]
#读取每次网站数据,并一键写入上面file文件
urllib.request.urlretrieve(urll,file)
#打印爬取成功
print("-----成功------")
#如果异常则显示下面异常语句,查看原因
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
最后,运行,得出结果,见下图