网络爬虫之手机号测吉凶(纯属娱乐)
#目标URL=” http://jx.ip138.com/”
#主要用到的python库:requests , etree
主要用xpath进行信息处理
先说一下xpath:
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力,说直白了就是在HTML代码中将标签中的内容提取出来。
思路:
- 先看一下网页
这就是我们主要要提取出来的信息;
先看一下提取出来的效果:
- 检查网站源代码(F12):
我们所需要的信息都在一个标签名为‘table’的标签中,在table标签中又有小的标签’tr’,’td’包裹着我们的信息,所以网站标签的路径十分清晰。标签的路径就是我们需要的XPATH,这个可以直接通过浏览器复制粘贴的,所以不有担心路径找出!
- 写代码:
先有requests函数的get函数抓取网页的代码,在抓取的时候最好加上请求头,不然有些网站会封IP:
Str(number)中的number就是我们要查询的手机号
然后就用将我们获得的html代码进行编码和整理:
基本所有的网站都可以用这几行代码来整理,可谓万能代码。
然后就用xpath来提取信息了:
Xpath在etree库中,而etree 在模块lxml中,所以向C语言一样先加头文件from lxml import etree
然后根据路径就可以提取了:
con1=selet.xpath('/html/body/table[2]/tr[1]/td/b/text())
con2=selet.xpath('/html/body/table[2]/tr[1]/td/text())
因为标签table中有8个这样的小标签,所以我们要循环8次,只是每次循环的的时候将tr[ ]中的数字换了,然后将其print出来就可以了:
最后给出全部代码:
import requests
from lxml import etree
def find(slet,num):
con1=selet.xpath('/html/body/table[2]/tr['+str(num)+']/td/b/text()')
con2=selet.xpath('/html/body/table[2]/tr['+str(num)+']/td/text()')
for i in con1:
print(i)
for i in con2:
print(i)
while(1):
print("手机号测吉凶纯属娱乐!!!\n输入q退出!\n")
number=input("请输入你的手机号:")
if(number=='q'):
break;
kv={'user-agent':'Chrome/55.0.2883.87 Mobile Safari/537.36'}
url="http://jx.ip138.com/"+str(number)
r=requests.get(url,headers=kv)
r.encoding=r.apparent_encoding
html=r.text
selet=etree.HTML(html)
for num in range(1,9):
find(selet,num)
print("*************************************")