欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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)

最后,运行,得出结果,见下图

python练习系列一:爬取新浪新闻练习