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
查看评论