XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。
所以在做爬虫时,我们完全可以使用XPath来做相应的信息抽取。
使用XPath
抓取猫眼电影排行
利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容。requests比urllib使用更加方便,而且目前我还没有系统学习HTML解析库,所以这里就选用正则表达式来作为解析工具。
正则表达式
打开开源中国提供的正则表达式测试工具–>在线正则表达式测试,输入待匹配的文本,然后选择常用的正则表达式,就可以得出相应的匹配结果了。例如,这里输入待匹配的文本如下:
Hello, my phone number is 086+18845658121 and email is sunstady@gmail.com, and my website is http://sanstylemc.cn
这段字符串中包含了一个电话号码和一个电子邮件,接下来就尝试用正则表达式提取出来,如图所示。
Linux下SCP指令的使用
SCP,即Secure copy的简写。通常在Linux下执行远程拷贝文件使用,他和cp指令类似,只不过cp是本机使用,而SCP则是跨机器使用。SCP传输是基于SSH的加密传输,也就是说知道SSH的账密就可以上下载文件了,因此比较安全。
公平锁与非公平锁
在Java并发编程中,公平锁与非公平锁是很常见的概念,ReentrantLock、ReadWriteLock默认都是非公平模式,非公平锁的效率为何高于公平锁呢?公平锁与非公平锁有什么区别呢?
首先先简单从名字上来理解,公平锁就是保障了多线程下各种线程取锁的顺序,先到的线程优先获取锁,而非公平锁则无法提供这个保障。看到网上很多说法说非公平锁获取锁时各线程的概率是随机的,这也是一种很不确切的说法。非公平锁并非真正的随机,其获取锁还是有一定顺序的,但其顺序究竟是怎样呢?先看图:
py统计单词个数
任一个英文的纯文本文件,统计其中的单词出现的个数
py生成图片验证码
生成图片二维码,并判断填写的验证码是否正确。
线程的生命周期
当线程被创建并启动后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)
、就绪(Runnable)
、运行(Running)
、阻塞(Blocked)
和死亡(Dead)
五种状态。尤其是当线程启动以后,它不可能一直”霸占”着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。
sleep()和wait()的区别
对于sleep()方法,该方法是属于Thread类中的。而wait()方法是属于Object()类中的。
sleep()方法导致了程序暂停执行指定的时间,让出cpu改其他线程,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。
在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
start和run的区别
run()方法:
在本线程内调用Runnable对象的run()方法,可以重复多次调用。start()方法:
启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程。