Python+Requests+lxml抓取网页练习-给侄女取名评分

现在的取名网站基本都收费了,直接输入生辰八字就无限查询的时代没有了。但还好,有些网站还能免费给姓名评分,至于评分原理我不懂,满分100分,分越高名字越好。这次我就是用python抓取了评分网站的数据,快速完成取名评分的。具体如下:

1、首先生成一堆意向姓名

这个去网上一搜一大堆,比如:“2019热门女孩姓名”,随便找个搜索结果看看。

 

把这些名字复制到一个文本文件,进过查找、替换,转换成如下样式:

 

2、找一个能姓名评分的网站

我找到了这个网站:http://www.guabu.com/xingming/

 

输入姓名,点 姓名打分

 

查询结果很多,包括天地人三格和外格总格等评分,姓名吉凶等等,这次还不专注这些,只看最后的一个总分

 

这个分数代表姓名的好坏,分越高越好。这是人的心里作祟,只要分高就行,至于分怎么来的,只告诉他们很玄妙就行了。

3、分析网页结构

首先得分析下这个网页,这个查询是用get方式传递的。

 

再看查询结果,在查询结果页面,在评分字符上右击,选择“检查”,打开开发者选项

 

 

此时看到评分数据被包括在加了属性的font标签中。

4、搬出Python,抓取数据

先上代码,逐个解释

 

首先导库:

requests:负责发送html请求及接收数据

time:在这只用了sleep函数做个定时器

lxml:负责对取回的html文档进行xml格式化,方便查找数据

把所有姓名,放入一个list中

然后用for循环遍历没一个姓名

requests.get方法可以获得html的完整对象,html.text返回html的内容,第17行用etree对象转换html为xml格式,第18行用etree对象的xpath方法定位元素位置,此处的xpath是xml的一种标准,本例中的意思是:查找设置了size=15的font标签,后面的/text()表示获取这个标签内的数据。

返回值放到一个list中,用print打印出来。

为了防止访问过于频繁对目标服务器造成影响,用time.sleep(3)函数设置了3秒暂停。

5、执行结果

 

如果评分不行,就再找一堆名字来测试吧,就这样。