nova-week3

2024-02-16 08:32
文章标签 nova week3

本文主要是介绍nova-week3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.链接的跟踪和爬取

1.1寻找任何一个站点主页,例如www.nju.edu.cn将当前页面中的所有链接提取出来,用一个 json 格式的文件存储

1.1.1/2 基础知识和思考题

json文件格式的具体语法:SoJson在线编辑,格式化,Json语法介绍

python中的json库用法:
python json-菜鸟教程
json模块详解

  1. json.dumps函数相当于文件读写中的write,作用:把python对象编码为JSON字符串
    dumps:无文件操作 dump:序列化+写入文件
  2. json loads函数相当于文件读写中的read,作用:将已编码的 JSON 字符串解码为 Python 对象
    loads:无文件操作 load: 读文件+反序列化

不带s的用于操作文件,带s的用于数据类型的转换:

def store(data):with open('data.json', 'w') as fw:# 将字典转化为字符串json_str = json.dumps(data)fw.write(json_str)# 上面两句等同于下面这句json.dump(data,fw)fw.close()

将json语句格式化的代码:

data={"a":1,"b":2,"c":3,"d":4,"e":5}
Json=json.dumps(data,sort_keys=True, indent=4, separators=(',', ': '))
print(Json)

用python.json读写一个json文件的函数封装:

import  json
def json_write(file):with open(file,'a') as f:data={"a":1,"b":2,"c":3,"d":4,"e":5}Json=json.dumps(data)f.write(Json)f.close()return
def json_read(file):with open(file,'r') as f:Json=json.loads(f.read())#没有找到通过loads()方法直接格式化内容的办法Json=json.dumps(Json,sort_keys=True, indent=4, separators=(',', ': '))#格式化json代码,为了好看print(Json)f.close()
if __name__=="__main__":json_write(r"C:\Users\lenovo\Desktop\test.json")json_read(r"C:\Users\lenovo\Desktop\test.json")

将含中文的可迭代对象写入json文件:

#把中文形式的可迭代对象写入json文件中
import json
with open(r"C:\Users\lenovo\Desktop\test.json",'a') as f:data={"一":1,"二":2,"三":3,"四":4,"五":5}Json=json.dumps(data,sort_keys=True, indent=4, separators=(',', ': '))f.write(Json)f.close()

结果为:

{"\u4e00": 1,"\u4e09": 3,"\u4e8c": 2,"\u4e94": 5,"\u56db": 4
}

原因: 由于# – coding: utf-8 – 的作用,文件内容以utf-8编码,json文件中的是utf-8编码后的结果\u4e00
json.dumps 序列化时对中文默认使用的ascii编码
字符串在Python内部的表示是unicode编码。
因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码;decode(’utf-8’)表示将utf-8编码的字符串转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串;encode(‘gb2312’),表示将unicode编码的字符串转换成gb2312编码。

处理中文问题的解决办法:

Json=json.dumps(data,ensure_ascii=False 

1.1.3任务代码

import requests
import json
from lxml import etree
def get_html(url):"获取网站的html代码并将其用lxml初始化,并返回"Html=requests.get(url)html=etree.HTML(Html.text)return html
def get_link(html):"获取html中的链接地址,并写入文件"with open(r"C:\Users\lenovo\Desktop\test.json",'a')as f:link=html.xpath("//a/@href")Json=json.dumps(link,sort_keys=True, indent=4, separators=(',', ': '))f.write(Json)f.close()
if __name__=="__main__":html=get_html(r'http://www.nju.edu.cn/')get_link(html)

运行结果截图:
在这里插入图片描述

注意!!!

不要在json文件中写任何的注释,注释会被当做一个顶级项! json就是一个对象 它必须是由[…]或者{…}构成的

1.2链接内链的爬取

1.2.1/2基础知识及思考题

正则表达式可以用与字符串操作,相当于规定想要数据的规格,然后在大量数据中寻找想要的进行操作
廖雪峰博客——正则表达式规范
菜鸟教程——正则大全
需要用到re库我已在软工的课程中对正则表达式有所了解和学习
两个超级好用的网站:
将正则表达式可视化!!!
给出每一步正则表达式的解释

  1. 写出匹配 11 位电话号码的正则表达式,假设任何一个电话号码都必定以数字 1 开头。
[1][0-9]{10}
  1. 写出匹配南京大学邮箱的正则表达式,该邮箱可以是教职工邮箱( xxx@nju.edu.cn )或学生邮箱( xxx@smail.nju.edu.cn )
[\w]+@(smail)?nju\.edu\.cn
  1. 任何一个目录都可以用绝对路径和相对路径表示。假设我们当前处于目录 C:/user/Nova/ 下,输入的目录为DS/week3 ,这是一个加在当前目录后的相对路径,代表将当前目录转为 C:/user/Nova/DS/week3/ ;如果输入目录 C:/user/Nova/DA/ ,这是一个绝对路径目录,代表将当前目录转为 C:/user/Nova/DA/ 。请通过正则表达式识别一个输入是相对路径还是绝对路径,并输出转换后的目录。
#正则表达式相对路径练习
import  re
address=input()
if re.match(r"C:/user/Nova/[\w]*",address):print(address)
else:print("C:/user/Nova/"+address)

1.2.3任务代码

#从任务1中的站点主页出发,获取当前站点的所有内链链接,将其通过 print 方法打印到控制台。
import re
import requests
from lxml import etree
import json
def json_read():"读取json文件中的内容"with open(r"C:\Users\lenovo\Desktop\test.json",'r') as f:link=json.loads(f.read())f.close()return link
def get_postfix(url):"爬取对应url下的链接地址"Html=requests.get(url)html=etree.HTML(Html.text)link=html.xpath("//a/@href")return link
def url_search(prefix,link):"寻找匹配的内链地址并输出;通过递归穷尽所有分支"for i in link:if re.match(r"/[\w/]+\.htm[\w]*",i):print(prefix+i)post=get_postfix(prefix+i)if post!=[]:url_search(prefix+i,post)return
if __name__=="__main__":link=json_read()url_search("http://www.nju.edu.cn",link)
结果

爬下来212条htm后缀的内链地址

2.图片文件的爬取

os库基础:

百闻不如一用:os库实例
一篇详细介绍图片爬取的博客
注:非文本文件要用二进制写入文件url.content

代码:
#将南京大学主页 www.nju.edu.cn 中的所有图片保存到本地,当前代码文件目录的 img 文件夹下
import os
import re
import requests
from lxml import etree
def dir_make():"判断当前目录下是否有'img'文件夹,没有就创建一个"path=os.getcwd()if os.path.isdir(path+'\img'):passelse:os.makedirs('img')return
#网站中两类图片存放的标签不同,分别用函数爬取
#封面大图不会爬5555
def png1_crawler():"爬取网页内所有的图片(类型一)"url=requests.get("http://www.nju.edu.cn")html=etree.HTML(url.text)photo_address=html.xpath("//img/@src")return photo_address
def png2_crawler():"爬取网页内所有的图片(类型二)"url=requests.get("http://www.nju.edu.cn")html=etree.HTML(url.text)photo_address=html.xpath("//a/div/@style")new_photo_address=[]for i in photo_address:a=re.findall("/.*\.jpg",i)new_photo_address.append(a[0])return new_photo_address
#png2_crawler()不知道为什么只能爬下来一张代码555
def save():"将图片存入文件夹中"url1=png1_crawler()for i in range(len(url1)):with open(r'C:\Users\lenovo\Desktop\untitled\nova\img'+"\\"+str(i)+".jpg",'wb')as f:html="http://www.nju.edu.cn"+url1[i]r=requests.get(html)f.write(r.content)f.close()url2=png2_crawler()for i in range(len(url2)):with open(r'C:\Users\lenovo\Desktop\untitled\nova\img'+"\\"+str(i+100)+".jpg",'wb')as f:html="http://www.nju.edu.cn"+url2[i]r=requests.get(html)f.write(r.content)f.close()return
if __name__=="__main__":dir_make()save()
结果:从网站上爬下来了12张图片

在这里插入图片描述

这篇关于nova-week3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714027

相关文章

OpenStack Victoria版——6.2计算节点-Nova计算服务组件

6.2计算节点-Nova计算服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版 离线安装部署系列教程(全) OpenStack Train版 离线安装部署系列教程(全) 欢迎留言沟通,共同进步。 文章目录 Nova相关软件

OpenStack:Glance共享与上传、Nova操作选项解释、Cinder操作技巧

目录 Glance member task Nova lock shelve rescue Cinder manage local-attach transfer backup-export 总结 原作者:int32bit,参考内容 从2013年开始折腾OpenStack也有好几年的时间了。在使用过程中,我发现有很多很有用的操作,但是却很少被提及。这里我暂不直接

Nova Club Cointelegraph 酒会:以最别样的方式认识Etalonium

如果说最近有什么活动是惹人瞩目,大咖云集的话,那一定非即将举行的Nova Club & Cointelegraph联合酒会莫属。这场云集了一众世界名模,时尚翘楚,国际领航人,行业大咖的盛会必将成为诸多业内人士眼中的高光时刻。 【世链财经原创】 本次私密酒会将于8月21日晚上在北京举行,由Nova Club携手Cointelegraph,同时联合CBE与Biki共同举办。 具有全球影响力的知名区块链

可以根据手机的折叠状态改变播放音效:nova Flip 的妙趣音效

由于折叠机最基础的“可折叠”属性,导致折叠机的扬声器相对于人的位置来说会存在更多的变化,在不同的折叠状态下,听感方面可能就会大有不同。 nova Flip手机利用这一特性,首次根据折叠形态差异,自适应了不同形态的音效氛围。 展开态:当手机是类似于直板机的展开态时,搭配首发的histen9.3音频算法,nova Flip拥有更具清晰度和更自然的音质效果,打造更具还原度的音效体验。   悬

华为nova Flip这么轻薄的机身还能这么卷?

近年来,小折叠手机备受关注,随着各大厂商纷纷布局小折叠赛道,行业内卷现象也让小折叠的创新程度再上一个新的高度。而对拥有庞大的年轻用户基础的小折叠来说,简约大方的设计风格,轻薄小巧的精致外观,以及超大的电池容量仍然是大家选择一款小折叠的几个重要因素。 最新发布的华为nova Flip,就在6.88mm极致轻薄的厚度下,植入了4400mAh的大电池容量。那么,华为nova Flip究竟是如何做到

后置人像主题2.0首现nova Flip,前后置都超能打!

继华为nova12系列的前置人像美颜主题上线后,nova Flip小折叠手机,首次实现在后置自拍场景下,支持nova品牌人像主题2.0功能。 全新升级的华为达芬奇人像引擎 2.0,带来“形、质、色、光、画”智能人像优化,脸型立体,肤质细腻,肤色清透,明暗有致,虚化唯美自然,全面提升人像质感。后置原生、质感、妆感三种人像美颜主题,为用户提供三种不同的美颜质感。 原生主题:高清原相机质感,清爽

深入浅出OpenStack云计算平台管理(nova-compute/network)

各位网友,我这里有套课程想和大家分享,是来自明义(robby)老师的一套关于云计算平台管理的课程, 需要的朋友可以加我qq和我联系。QQ2059055336.     1.1、 课程的背景       OpenStack是 一个由Rackspace发起、全球开发者共同参与的开源项目,旨在打造易于部署、功能丰富且易于扩展的云计算平台。OpenStack企图成为数据中心

Openstack -- nova-compute服务启动

1、/usr/bin/nova-compute #从nova模块导入/nova/cmd/compute main函数启动服务1 #!/usr/bin/python2 # PBR Generated from u'console_scripts'3 4 import sys5 6 from nova.cmd.compute import main7 8 9 if __name__ == "__m

nova-network创建实例之FlatManager

1 安装devstack,配置local.conf FLOATING_RANGE=192.168.1.224/27 FIXED_RANGE=10.10.10.0/24 FIXED_NETWORK_SIZE=256FLAT_INTERFACE=eth1NETWORK_MANAGER=FlatManagerPUBLIC_INTERFACE=br200VLAN_INTERFACE=et

深挖Openstack Nova - evacuate疏散函数

一. 当实例所在的节点发生故障不可用时,可执行evacuate操作,在另外一个新节点rebuild该实例,实现高可用。 这可以是OpenStack计算节点HA的一种实现方案。 二. API调用 nova.servers.evacuate(server=fm['id']), on_shared_storage=True 1. on_shared_storage参数在2.14版本后废除,自