飞道的博客

Python爬虫 爬取腾讯新闻首页的新闻内容

370人阅读  评论(0)

Python爬虫

爬取腾讯新闻首页的新闻内容

最近学习了爬虫,爬了一些内容,分享一下,方便大家。

#导入模块
import urllib.request
import urllib.error
import re,ssl
import ssl
#针对https ,需要单独处理
#import ssl
#ssl._create_default_https_context = ssl._create_unverified_context
ssl._create_default_https_context = ssl._create_unverified_context
#腾讯新闻首页网址
url="https://xw.qq.com/"
#该部分通过用户代理(User-Agent)来模拟浏览器请求,但腾讯新闻可直接访问,可不用
#headers=("User-Agent"," Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Mobile Safari/537.36")
#opener=urllib.request.build_opener()
#opener.addhesders=[headers]
#date=opener.open(url).read().decode("utf-8","ignore")
#爬取首页所有信息
#urllib.request.urlopen()函数会报错,所以要进行爬虫异常处理
try:
    date=urllib.request.urlopen(url).read().decode("utf-8","ignore")
    print(len(date))
#HTTPError有两个属性,异常原因和异常状态码
except urllib.error.HTTPError as e:
    #打印异常状态码
    if hasattr(e,"code"):
        print(e.code)
    #打印异常原因
    if hasattr(e,"reason"):
        print(e.reason)
#正则表达式,提取所需的信息(即新闻链接)
pat=''',"url":"(.*?)",'''
#全局匹配函数,把提取出来的信息放入列表中
thislink=re.compile(pat).findall(date)
#清除缓存
urllib.request.urlcleanup()
#打印该列表,可不要
#print(thislink)
#通过循环将网址放入本地
for i in range(len(thislink)):
    #进行异常处理,urllib,request.urlretrieve()函数会报错,所有要进行爬虫异常处理
    try:
        #判断字符串"https"是否在提取出的链接中,若在,直接放入本地
        if ("https" in thislink[i]):
            #通过urlretrieve()直接把链接放入本地
            newurl=thisurl[i]
            urllib.request.urlretrieve(newurl,"D:/write1/date/"+str(i)+".html")
            #打印存放好的网址
            print(newurl)
        else:
            #没有"https"时,通过手动添加链接头(包括https部分),此时针对了https,单独处理
            newurl="https://xw.qq.com"+thislink[i]
            urllib.request.urlretrieve(newurl,"D:/write1/date/"+str(i)+".html")
            #打印存放好的网址
            print(newurl)
    #HTTPError有两个属性,异常原因和异常状态码
    except urllib.error.HTTPError as e:
        #打印异常状态码
        if hasattr(e,"code"):
            print(e.code)
        #打印异常原因
        if hasattr(e,"reason"):
            print(e.reason)
        
        



转载:https://blog.csdn.net/m0_51290808/article/details/115560912
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场