用三种方式对网页信息进行提取
#coding=utf-8
import requests
from lxml import etree
url='https://movie.douban.com/cinema/nowplaying/nanjing/'
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/83.0.4090.0 Safari/537.36 Edg/83.0.467.0 ',
'Referer': 'https://movie.douban.com/'
}
response=requests.get(url, headers=headers)
html=response.text
htmlElement=etree.HTML(html)
ul=htmlElement.xpath("//ul[@class='lists']")[0]
movies=[]
lis=ul.xpath('./li')
for li in lis:
title=li.xpath('@data-title')[0]
director=li.xpath('@data-director')[0]
actors=li.xpath('@data-actors')[0]
thumbnail=li.xpath('.//img/@src')[0]
movie={
'title': title,
'director': director,
'actors': actors,
'thumbnail': thumbnail
}
movies.append(movie)
print(movies)
output:[{'title': '奇妙王国之魔法奇缘', 'director': '陈设', 'actors': '卢瑶 / 张洋 / 陈新玥', 'thumbnail': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2577837112.jpg'}, {'title': '大红包', 'director': '李克龙', 'actors': '包贝尔 / 李成敏 / 贾冰', 'thumbnail': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2581346773.jpg'}, {'title': '金禅降魔', 'director': '彭发 王凯 程中豪', 'actors': '释小龙 / 胡军 / 姚星彤', 'thumbnail': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2564190636.jpg'}, {'title': '82号古宅', 'director': '袁杰', 'actors': '葛天 / 扈天翼 / 黄心娣', 'thumbnail': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2586838530.jpg'}, {'title': '亲亲哒', 'director': '马雍', 'actors': '马良博一 / 卢小路 / 尹恒', 'thumbnail': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2579189777.jpg'}, {'title': '六月的秘密', 'director': '王暘', 'actors': '郭富城 / 苗苗 / 吴建飞', 'thumbnail': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2522497098.jpg'}, {'title': '秘密访客', 'director': '陈正道', 'actors': '郭富城 / 段奕宏 / 张子枫', 'thumbnail': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2579398648.jpg'}, {'title': '无名狂', 'director': '李云波', 'actors': '张晓晨 / 隋咏良 / 上白', 'thumbnail': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2574800433.jpg'}, {'title': '刺杀小说家', 'director': '路阳', 'actors': '雷佳音 / 杨幂 / 董子健', 'thumbnail': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2580314674.jpg'}]
#coding=utf-8
import requests
from lxml import etree
url='https://www.lagou.com/zhaopin/PHP/?labelWords=label'
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/83.0.4090.0 Safari/537.36 Edg/83.0.467.0 ',
'Referer': 'https://www.lagou.com/'
}
response=requests.get(url, headers=headers)
html=response.text
htmlElement=etree.HTML(html)
ul=htmlElement.xpath("//ul[@class='item_con_list']")[1]
jobs=[]
lis=ul.xpath('./li')
for li in lis:
position=li.xpath('@data-positionname')[0]
company=li.xpath('@data-company')[0]
salary=li.xpath('@data-salary')[0]
website=li.xpath(".//a/@href")[0]
education=li.xpath(".//div[@class='li_b_l']//text()")[3]
job={
'position': position,
'company': company,
'salary': salary,
'website': website,
'education': education
}
jobs.append(job)
print(jobs)
output:[{'position': '高级PHP开发工程师', 'company': '广州微用科技', 'salary': '10k-18k', 'website': 'https://www.lagou.com/jobs/6813986.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 大专\n '}, {'position': '高级PHP开发工程师', 'company': '互爱(北京)科技股份有限公司', 'salary': '25k-40k', 'website': 'https://www.lagou.com/jobs/6585859.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 不限\n '}, {'position': 'php开发工程师', 'company': '金山云', 'salary': '20k-40k', 'website': 'https://www.lagou.com/jobs/6871122.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验5-10年 / 不限\n '}, {'position': 'php开发工程师', 'company': '央视频融媒体', 'salary': '12k-20k', 'website': 'https://www.lagou.com/jobs/6873952.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验5-10年 / 本科\n '}, {'position': 'php开发工程师', 'company': '顺丰同城科技', 'salary': '20k-40k', 'website': 'https://www.lagou.com/jobs/5788250.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验1-3年 / 本科\n '}, {'position': 'php开发工程师', 'company': '红布林', 'salary': '15k-30k', 'website': 'https://www.lagou.com/jobs/6963665.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 本科\n '}, {'position': 'php开发工程师', 'company': '吉城美家', 'salary': '7k-14k', 'website': 'https://www.lagou.com/jobs/5553859.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 本科\n '}, {'position': 'php开发工程师', 'company': '有咖互动', 'salary': '10k-15k', 'website': 'https://www.lagou.com/jobs/6959578.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验1-3年 / 本科\n '}, {'position': 'php开发工程师', 'company': '微拍堂', 'salary': '20k-30k', 'website': 'https://www.lagou.com/jobs/6972670.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 本科\n '}, {'position': 'PHP开发工程师', 'company': '广州市搜游网络科技', 'salary': '20k-40k', 'website': 'https://www.lagou.com/jobs/6959547.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 大专\n '}, {'position': 'PHP高级开发工程师', 'company': '广州市搜游网络科技', 'salary': '25k-45k', 'website': 'https://www.lagou.com/jobs/6943052.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 大专\n '}, {'position': 'PHP高级开发工程师', 'company': '明源云', 'salary': '15k-25k', 'website': 'https://www.lagou.com/jobs/4619045.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 本科\n '}, {'position': 'PHP开发工程师', 'company': '微通', 'salary': '8k-16k', 'website': 'https://www.lagou.com/jobs/501604.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验不限 / 不限\n '}, {'position': 'php开发工程师', 'company': '掌阅', 'salary': '15k-25k', 'website': 'https://www.lagou.com/jobs/6237409.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验3-5年 / 本科\n '}, {'position': 'php开发工程师', 'company': '经传多赢', 'salary': '10k-18k', 'website': 'https://www.lagou.com/jobs/6820316.html?show=0d9c9879671444a5926680abc20322be', 'education': '经验1-3年 / 本科\n '}]
# coding=utf-8
import requests
from bs4 import BeautifulSoup
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
Temp=[]
def parsePages(url):
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/83.0.4090.0 Safari/537.36 Edg/83.0.467.0 '
}
response=requests.get(url, headers=headers)
text=response.content.decode('utf-8')
# soup=BeautifulSoup(text, 'lxml')
soup=BeautifulSoup(text, 'html5lib')
conMidtab=soup.find('div', attrs={'class': 'conMidtab'})
tables=conMidtab.find_all('table')
for table in tables:
trs=table.find_all('tr')[2:]
for index, tr in enumerate(trs):
infors=list(tr.stripped_strings)
city=infors[1] if index==0 else infors[0]
minTemp=infors[-2]
Temp.append({'city': city, 'minTemp': int(minTemp)})
def main():
urls=['hb', 'db', 'hd', 'hz', 'hn', 'xn', 'xb', 'gat']
for url in urls:
url=f'http://www.weather.com.cn/textFC/{url}.shtml'
parsePages(url)
Temp.sort(key=lambda data:data['minTemp'])
data=Temp[:10]
cities=list(map(lambda x: x['city'], data))
minTemp=list(map(lambda x:x['minTemp'], data))
chart=Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT, page_title='中国最低气温排行榜'))
chart.add_xaxis(cities)
chart.add_yaxis('最低气温', minTemp)
chart.render()
if __name__=='__main__':
main()
# coding=utf-8
import requests
import re
def parsePages(url):
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/83.0.4090.0 Safari/537.36 Edg/83.0.467.0 '
}
response=requests.get(url, headers=headers)
text=response.text
rTitles=re.compile(r'<div class="cont">.*?<b>(.*?)</b>', re.S)
rDynasties=re.compile(r'<div class="cont">.*?<p class="source"><a.*?>(.*?)</a>', re.S)
rAuthors=re.compile(r'<div class="cont">.*?<p class="source"><a.*?>.*?<a.*?>(.*?)</a>', re.S)
rContsons=re.compile(r'<div class="cont">.*?<div class="contson".*?>(.*?)</div>', re.S)
titles=re.findall(rTitles, text)
dynasties=re.findall(rDynasties, text)
authors=re.findall(rAuthors, text)
contsons=re.findall(rContsons, text)
contents=[]
for contson in contsons:
x=re.sub(r'<.*?>', '', contson)
contents.append(x)
poems=[]
for title, dynasty, author, content in zip(titles, dynasties, authors, contents):
poems.append({
'title': title,
'dynasty': dynasty,
'author': author,
'content': content
})
print(poems)
def main():
url='https://www.gushiwen.org/default_1.aspx'
parsePages(url)
if __name__=='__main__':
main()
[{'title': '满江红·夜雨凉甚忽动从戎之兴', 'dynasty': '宋代', 'author': '刘克庄', 'content': '\n金甲雕戈,记当日、辕门初立。磨盾鼻、一挥千纸,龙蛇犹湿。铁马晓嘶营壁冷,楼船夜渡风涛急。有谁怜、猿臂故将军,无功级。平戎策,从军什。零落尽,慵收拾。把茶经香传,时时温习。生怕客谈榆塞事,且教儿诵花间集。叹臣之壮也不如人,今何及。\n'}, {'title': '阮郎归·绍兴乙卯大雪行鄱阳道中', 'dynasty': '宋代', 'author': '向子諲', 'content': '\n江南江北雪漫漫,遥知易水寒。同云深处望三关,断肠山又山。天可老,海能翻,消除此恨难。频闻遣使问平安,几时鸾辂还?\n'}, {'title': '碧瓦', 'dynasty': '宋代', 'author': '范成大', 'content': '\n碧瓦楼头绣幙遮,赤栏桥外绿溪斜。无风杨柳漫天絮,不雨棠梨满地花。\n'}, {'title': '减字浣溪沙·秋水斜阳演漾金', 'dynasty': '宋代', 'author': '贺铸', 'content': '\n秋水斜阳演漾金,远山隐隐隔平林。几家村落几声砧。记得西楼凝醉眼,昔年风物似如今。只无人与共登临。\n'}, {'title': '次韵公实雷雨', 'dynasty': '宋代', 'author': '洪炎', 'content': '\n惊雷势欲拔三山,急雨声如倒百川。但作奇寒侵客梦,若为一震静胡烟。田园荆棘漫流水,河洛腥膻今几年。拟叩九关笺帝所,人非大手笔非椽。\n'}, {'title': '浣溪沙·雨歇梧桐泪乍收', 'dynasty': '清代', 'author': '纳兰性德', 'content': '\n雨歇梧桐泪乍收,遣怀翻自忆从头。摘花销恨旧风流。帘影碧桃人已去,屧痕苍藓径空留。两眉何处月如钩?\n'}, {'title': '交趾怀古', 'dynasty': '清代', 'author': '曹雪芹', 'content': '\n铜铸金镛振纪纲,声传海外播戎羌。马援自是功劳大,铁笛无烦说子房。\n'}, {'title': '野老', 'dynasty': '唐代', 'author': '杜甫', 'content': '\n野老篱前江岸回,柴门不正逐江开。渔人网集澄潭下,贾客船随返照来。长路关心悲剑阁,片云何意傍琴台。王师未报收东郡,城阙秋生画角哀。\n'}, {'title': '碧城三首', 'dynasty': '唐代', 'author': '李商隐', 'content': '\n碧城十二曲阑干,犀辟尘埃玉辟寒。阆苑有书多附鹤,女床无树不栖鸾。星沉海底当窗见,雨过河源隔座看。若是晓珠明又定,一生长对水晶盘。\n对影闻声已可怜,玉池荷叶正田田。不逢萧史休回首,莫见洪崖又拍肩。紫凤放娇衔楚佩,赤鳞狂舞拨湘弦。鄂君怅望舟中夜,绣被焚香独自眠。\n七夕来时先有期,洞房帘箔至今垂。玉轮顾兔初生魄,铁网珊瑚未有枝。检与神方教驻景,收将凤纸写相思。武皇内传分明在,莫道人间总不知。\n'}, {'title': '水龙吟·听兮清佩琼瑶些', 'dynasty': '宋代', 'author': '辛弃疾', 'content': '\n用“些语”再题瓢泉,歌以饮客,声韵甚谐,客皆为之釂。\n听兮清佩琼瑶些。明兮镜秋毫些。君无去此,流昏涨腻,生蓬蒿些。虎豹甘人,渴而饮汝,宁猿猱些。大而流江海,覆舟如芥,君无助、狂涛些。路险兮山高些。块予独处无聊些。冬槽春盎,归来为我,制松醪些。其外芳芬,团龙片凤,煮云膏些。古人兮既往,嗟予之乐,乐箪瓢些。\n'}]
此篇文章简单的介绍下模拟器EVE-NG的使用,具体包括Dynamips设备导入与运行,IOL设备的导入与运行,QEMU设备的导入与运行,客户端软件的安装,物理网络与虚拟网络的结合等。
一.导入镜像
Dynamips是由法国人Chris Fillot于2005年发布的用于模拟Cisco设备的模拟器,它可以运行标准的IOS镜像,虽然此模拟器比较陈旧,但仍然有很多网工愿意使用。EVE-NG支持Cisco IOS 1710、3725与7206,这些镜像可从思科官网或互联网上下载到。推荐使用WinSCP向EVE-NG服务器上传镜像,WInSCP具体使用方法不多叙述,将下载好的.bin文件拖至服务器/opt/unetlab/addons/dynamips/目录下,然后重命名此文件,后缀改为.image。接下来修正权限,作用是保证Dynamips对于这个镜像有读取权限,运行SecureCRT或直接在虚拟机上操作,运行命令/opt/unetlab/wrappers/unl_wrapper -a fixpermissions修正权限。接下来是计算idle值,Dynamips是个模拟器,会在x86平台下模拟思科的CPU,所以要对虚拟的CPU指令翻译成可在x86下执行的指令,idle值用来记录虚拟CPU何时不工作,这样就可以在它不工作时停止翻译,降低CPU利用率。控制台执行命令dynamips -P 3725 /opt/unetlab/addons/dynamips/镜像名,模拟器会加载此镜像并显示启动过程,进入后同时按Ctrl+]键,松手后按i键,便会计算idle值,计算完毕后记录下,然后按Ctrl+]键回到控制台。接下来此镜像就可以在EVE-NG的Web界面中使用了。
由于EVE-NG是基于linux的Ubuntu系统实现的,所以了解Linux基础知识与命令十分重要,在此推荐《Linux就该这么学》这本书来了解并学习Linux基础知识。
IOL为IOS on Linux的简写,可以运行在基于x86平台的任意Linux发行版系统上,支持交换机高级特性,占用资源更少,启动快等优点。IOL在思科官方是不提供下载的,需要在网上自己寻找资源。运行IOL需要两个文件,一个是以bin为后缀的镜像,一个是以iourc为名的license文件,iourc是通过名为CiscoIOUKeygen.py的工具自动生成的。接下来把两个文件拖入/opt/unetlab/addons/iol/bin/中,然后修正权限/opt/unetlab/wrappers/unl_wrapper -a fixpermissions。操作完成后即可进入Web界面测试使用。
QEMU可以帮助EVE-NG运行更多的虚拟设备,完成复杂实验,越来越多的设备商开始开发并释放出适配KVM环境的系统,EVE-NG可以协助qcow2镜像运行更多设备,提高可玩性。EVE-NG需要QEMU镜像的后缀名为qcow2,该文件本质是一个操作系统的虚拟硬盘文件,正因如此,可以通过自己手动制作镜像。首先在各个厂家官网中查找qcow2镜像,并且要拖入指定目录中,EVE-NG对目录和文件名有要求,可以到官网http://www.eve-ng.net/documentation/images-table中查看。接下来仍然是修正权限/opt/unetlab/wrappers/unl_wrapper -a fixpermissions。
二. 集成客户端软件包
EVE-NG最大特色就是借助HTML5实现去客户端化,但毕竟实现的功能只是管理设备,诸如抓包等功能无法实现,所以需要通过本地终端软件去管理设备。EVE-NG官方提供了一个客户端集成软件包,里面包含PuTTY,UItravnc和Wireshark,只要安装此软件包并导入注册表文件,就能正常使用。进入http://虚拟机ip/files/windows.zip,下载该文件,解压后编辑wireshark_wrapper.bat,确认好用户名密码,并修改一下wireshark的程序路径,然后将整个UNetLab文件夹放入C:\Program Files下,运行win7_64bit_wireshark.reg注册。
三. 物理网络与虚拟网络的结合
在EVE-NG中,网络结合必不可少,实现此功能需要桥接技术。桥接可以将两个或多个网卡在逻辑层面接入到同一局域网,这样虚拟设备就可借助自身物理网卡去访问真实物理网络。在Lab拓扑中添加Network时有多个选项,分为两类,一类是Bridge,一类是Cloud,这些都显示为虚拟网桥,并有不同的用途。Bridge仅作用于内部,为节点对象互联互通,可以理解为傻瓜交换机。Cloud0为桥接到EVE-NG的第一块网卡,以此类推。如果将虚拟设备节点连接到Cloud0中,那么此节点就会被桥街道EVE-NG的第一款网卡。虚拟机中有三种网络模式,Bridge默认使用VMnet0虚拟网卡,NAT模式使用VMnet8网卡,Host-Only使用VMnet1网卡。Bridge模式中是将宿主机和虚拟机都连到VMnet0网卡上,虚拟机直接镰刀物理网络,并和宿主机在同一网段,共同访问物理网络。NAT模式默认打开DHCP与NAT服务,连接到此模式的虚拟机在访问物理网络时,源地址都会被翻译成宿主机的物理网卡ip。如需实现物理网络访问NAT下的虚拟机,需要在宿主机设置端口转换。Host-Only模式下的虚拟机可以互相通信,但不能访问物理网络。
EVE-NG的使用方法就简单介绍到这,此款模拟器功能强大,更多的功能需要各位自己学习和探索。
年此时,
都是艺考生最为紧张的时刻,
他们辛苦准备了一年,
终于要进行报名,去参加校考。
而在艺考生的背后,
几乎都能看到陪考家长忙碌的身影,
他们跟着孩子一起在几个城市间辗转,
“考试是孩子一生中非常重要的时刻,
作为家长,
要成为孩子坚实的后盾。”
——相信这就是父母的心愿。
近日
一段陪考妈妈在机场崩溃痛哭的视频
在网络上流传开来
陛下,您的Flash插件已过期,无法播放视频了
建议您……
升级 Flash 插件
切换到 HTML5 播放器
或者
视频中
这位妈妈说自己的孩子要去参加
浙江传媒学院的艺考二试
但是郑州机场因为大雾袭扰
造成航班大面积延误或取消
最终导致耽误了孩子的考试安排
看到视频
不少参加过艺考的学生
感同身受
网友评论:
@2019金灿灿:可能只有经历过艺考的学生才会这么有感触,看着视频里的妈妈控制不住的眼泪就下来了。
@没有故事要讲_:艺考每天行程安排的特别满,每天在不同的学校不同的城市奔波,机票是提前订的,行程时间也提前安排好了,由于天气原因机场两次取消航班误了时间,这个真不怨家长。
@Superdry_98:2017年我也有一次差点赶不上,如果能换交通工具就别犹豫了,愿所有学子都不被辜负。
@向左向右xc:女儿昨夜飞机从北京到杭州,开始一直担心怕下雪取消航班,女儿凌晨安全降落,做家长的心总算安稳下来,今天看到这个视频难过要命。
就当大家都在为
这个考生感到惋惜的时候
浙江传媒学院2月16日晚上进行了回应
得知此信息后,经我校研究,由于雨雪天气不可抗因素导致航班延误,未能按时赶到我校考试的考生,提供机票证明,允许在明天(即今天2月17日)下午正常考试结束前,给予安排考试!
祝奔波在考试路上的考生们
都能取得一个好成绩!
来源丨齐鲁晚报、河南都市频道、新浪微博(版权归原作者所有,如有侵权请联系删除)
编辑丨杨倩云
*请认真填写需求信息,我们会在24小时内与您取得联系。