当前位置: 首页 > 工具软件 > mechanize > 使用案例 >

通过python爬虫mechanize库爬取本机的ip地址

慕逸仙
2023-12-01

需求分析

最近,各平台更新的ip属地功能非常火爆,因此呢,也出现了许多新的网络用语,比如说“xx加几分”,“xx扣大分”等等,非常的有趣啊

可是呢,最近一个小伙伴和我说,“仙草哥哥,我也想查看一下自己的ip地址,可是我不会啊,我应该怎么样才能查看到自己的ip地址呢?”

关于如何查看自己的ip地址,这个我记得我在很早之前已经写过了,有兴趣的话可以查看一下我的这篇文章,当然这次呢,我会换一个复古的方式,使用mechanize进行爬取

实现分析

python中的mechanize算是一个比较古老的库了,在python2的时代中,使用的多一些,在python3以后就很少使用了,现在已经是2202年了,可能很多人都没听说过mechanize,这不要紧,我们先来简单的讲解一下,如何使用mechanize

其实,mechanize的使用方法,和内置的urllib使用方法非常的相似,也就是说,只要你学会了如何使用urllib,那么就能够顺利的使用mechanize

首先,我们需要导入mechanize,并且创建一个Browser

import mechanize

browser = mechanize.Browser()

然后通过open方法,直接打开一个网址,这个和urllib中的设想都是一样的,也就说,像打开本机文件那样,轻松的打开一个远程的文件

file = br.open(url)

然后,我们需要通过read()方法,读取这个文件中的内容

content = file.read()

但是需要注意的是,和以二进制的方法打开一个文件相似,通过read()读取得到的内容,是二进制的形式,必须要通过decode()方法,进行解码

html = content.decode()

当然,这个时候可能有的小伙伴要问了,默认的user-agent是什么样的呢?如何修改user-agent呢?其实使用mechanize的时候,设置user-agent并不困难,只需要通过addheaders就可以了

brower.addheaders = [("user-agent", "Mozilla/5.0")]

另外,别忘记了要设置是否遵守robots.txt协议,通过set_handle_robots()完成这项设置

brower.set_handle_robots(False)

这样,我们的基本操作就已经完成了,可以实际使用一下了

实际使用

比如说,我们通过mechanize发起一个请求

import mechanize
import json
from base64 import b64decode

br = mechanize.Browser()

url = b64decode("aHR0cDovL2h0dHBiaW4ub3JnL2dldA==").decode()
r = br.open(url).read().decode()

r = json.loads(r)
print("当前请求头:", r["headers"]["User-Agent"])

从这里,我们可以看出,使用mechanize发起请求的时候,默认的请求头就是urllib,也就是说,这段代码实际上相当于

import json
from urllib.request import urlopen
from base64 import b64decode

url = b64decode("aHR0cDovL2h0dHBiaW4ub3JnL2dldA==").decode()
r = urlopen(url).read().decode()

r = json.loads(r)
print("当前请求头:", r["headers"]["User-Agent"])

完整代码演示

那么,下面就是完整的通过mechanize查询本机ip地址的方法

import mechanize
import json
from base64 import b64decode

br = mechanize.Browser()

br.addheaders = [("user-agent", "Mozilla/5.0")]
br.set_handle_robots(False)

url = b64decode("aHR0cDovL2h0dHBiaW4ub3JnL2dldA==").decode()

r = br.open(url).read().decode()
r = json.loads(r)
print("当前请求头:", r["headers"]["User-Agent"])
print("当前ip地址:", r["origin"])

这个时候,可能有的小伙伴非常的困惑,查询本机ip地址,那我不是直接通过百度搜索,搜索ip就行了吗,为什么还需要自己写程序呢?

嗯。。。好吧,我觉得你说的也很对,但是,你不觉得尝试一下mechanize的使用超级酷嘛?

 类似资料: