一、 引言

一般情况下,没有特殊要求的客户,宽带服务提供商提供的上网服务,给客户家庭宽带分配的地址都是一个宽带服务提供商的内部服务地址,真正对外访问时通过NAT进行映射到一个公网地址,如果我们想确认自己的公网地址还不是很容易,但百度提供了一项服务,在百度查询时输入IP就可以查到浏览器所在本机的公网IP,利用该功能我们就可以查到本机公网IP,本节老猿就是要request+BeatifulSoap实现本机公网地址解析。

二、 百度公网地址解析过程分析

  1. 按《第14.3节 使用google浏览器获取网站访问的http信息》方法老猿截获了在google浏览器中利用百度查询IP的请求报文和应答报文内容:

    1)请求url为:
https://www.baidu.com/s?ie=utf-8&mod=1&isbd=1&isid=e58f9da20005786b&ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=IP&oq=IP&rsv_pq=e58f9da20005786b&rsv_t=d4227yacqXU1daqkMsArHRP4qBKnTUXvwdLeThY9w9ZbVPdHmXf4f6e3jik&rqlang=cn&rsv_enter=0&rsv_dl=tb&bs=IP&rsv_sid=1429_21095_29523_29519_28518_29098_29568_28831_29220_29072&_ss=1&clist=&hsug=&f4s=1&csor=2&_cr1=26201;

匿名方式下对应cookies的信息为(此处后面应用中需要请各位结合自己本机访问百度的cookies信息替换):

BAIDUID=05715D2A65E185B06ECD6CB62056F630:FG=1; BIDUPSID=05715D2A65E185B06ECD6CB62056F630; PSTM=1563498219; BD_UPN=12314353; ispeed_lsm=2; MCITY=-%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BD_HOME=1; H_PS_PSSID=1429_21095_29523_29519_29721_29568_29220_29072_29640; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; BD_CK_SAM=1; PSINO=7; ZD_ENTRY=baidu; sug=0; sugstore=1; ORIGIN=0; bdime=0; COOKIE_SESSION=15_0_9_9_18_35_0_4_9_5_0_0_69285_0_0_0_1567933423_0_1567941823%7C9%23278256_7_1564840597%7C2; H_PS_645EC=143a70YMQeyHbLrfwaFTZLdW6usn4%2FtO8C6yxMcDcF7RjvdnVWhYHMxScchloWr5ipmN; WWW_ST=1567941827974

2)应答报文中关键标签信息为:

<table><tr><td>
<span class="c-gap-right">本机IP:&nbsp;117.152.67.33</span>湖北省武汉市 移动
</td></tr></table>

2.构建http请求信息头后,利用request向百度发起IP地址查询的http请求;

3.使用BeatifulSoap解析应答信息。

三、 获取本机公网IP的完整代码

from bs4 import BeautifulSoup
import urllib.request def getip():
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}
cookie='BAIDUID=05715D2A65E185B06ECD6CB62056F630:FG=1; BIDUPSID=05715D2A65E185B06ECD6CB62056F630; PSTM=1563498219; BD_UPN=12314353; ispeed_lsm=2; MCITY=-%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BD_HOME=1; H_PS_PSSID=1429_21095_29523_29519_29721_29568_29220_29072_29640; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; BD_CK_SAM=1; PSINO=7; ZD_ENTRY=baidu; sug=0; sugstore=1; ORIGIN=0; bdime=0; COOKIE_SESSION=15_0_9_9_18_35_0_4_9_5_0_0_69285_0_0_0_1567933423_0_1567941823%7C9%23278256_7_1564840597%7C2; H_PS_645EC=143a70YMQeyHbLrfwaFTZLdW6usn4%2FtO8C6yxMcDcF7RjvdnVWhYHMxScchloWr5ipmN; WWW_ST=1567941827974'
try:
req = urllib.request.Request(url='https://www.baidu.com/s?ie=utf-8&mod=1&isbd=1&isid=05715D6F63032916&ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=baiduhome_pg&wd=IP&rsv_spt=1&oq=IP&rsv_pq=a0a4fcb40013a6aa&rsv_t=143a70YMQeyHbLrfwaFTZLdW6usn4%2FtO8C6yxMcDcF7RjvdnVWhYHMxScchloWr5ipmN&rqlang=cn&rsv_enter=0&rsv_dl=tb&inputT=4024&rsv_sug4=4105&bs=IP&rsv_sid=undefined&_ss=1&clist=&hsug=&f4s=1&csor=2&_cr1=28287',headers=header)
text = urllib.request.urlopen(req,timeout=5).read().decode()
except Exception as e:
return "访问网络失败,失败原因:\n"+str(e)
else:
soup = BeautifulSoup(text, 'lxml')
ipinfo=soup.select('table>tr>td span.c-gap-right') return ipinfo getip()

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

请大家多多支持,点赞、评论和加关注!谢谢!

第14.17节 爬虫实战3: request+BeautifulSoup实现自动获取本机上网公网地址的更多相关文章

  1. 第14.18节 爬虫实战4: request+BeautifulSoup+os实现利用公众服务Wi-Fi作为公网IP动态地址池

    写在前面:本文相关方法为作者独创,仅供参考学习爬虫技术使用,请勿用作它途,禁止转载! 一. 引言 在爬虫爬取网页时,有时候希望不同的时候能以不同公网地址去爬取相关的内容,去网上购买地址资源池是大部分人 ...

  2. 第14.16节 爬虫实战2:赠人玫瑰,手留余香! request+BeautifulSoup实现csdn博文自动点赞

    写在前面:本文仅供参考学习,请勿用作它途,禁止转载! 在<第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析>老猿分析了csdn博文点赞处理的http请求和响应报 ...

  3. 第14.15节 爬虫实战1:使用Python和selenium实现csdn博文点赞

    写在前面:本文仅供参考学习,请勿用作它途,禁止转载! 在开始学爬虫时,学习了csdn博客专家(id:明天依旧可好 | 柯尊柏)<实战项目二:实现CSDN自动点赞>的文章,文章介绍了通过Py ...

  4. 第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析

    如果要对csdn博文点赞,首先要登录CSDN,然后打开一篇需要点赞的文章,如<第14.1节 通过Python爬取网页的学习步骤>按<第14.3节 使用google浏览器获取网站访问的 ...

  5. 第14.6节 使用Python urllib.request模拟浏览器访问网页的实现代码

    Python要访问一个网页并读取网页内容非常简单,在利用<第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头>的方法构建了请求http报文的请求头情况下,使 ...

  6. 第14.9节 Python中使用urllib.request+BeautifulSoup获取url访问的基本信息

    利用urllib.request读取url文档的内容并使用BeautifulSoup解析后,可以通过一些基本的BeautifulSoup对象输出html文档的基本信息.以博文<第14.6节 使用 ...

  7. 第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

    第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解 封装模块 #!/usr/bin/env python # -*- coding: utf- ...

  8. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

  9. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

随机推荐

  1. JavaScript的原型对象prototype、原型属性__proto__、原型链和constructor

    先画上一个关系图: 1. 什么是prototype.__proto__.constructor? var arr = new Array; 1. __proto__是原型属性,对象特有的属性,是对象指 ...

  2. python爬虫07BeautifulSoup

    有一个高效的网页解析库 它的名字叫做 BeautifulSoup 它   是一个可以从 HTML 或 XML 文件中提取数据的 Python 库 首先我们要安装一下这个库 pip install be ...

  3. Pycharm激活码,2020年9月29日最新激活码

    分享一个Pycharm激活码给大家: 5MJ8MJ2T1Q-eyJsaWNlbnNlSWQiOiI1TUo4TUoyVDFRIiwibGljZW5zZWVOYW1lIjoi6I635Y+W77yaIG ...

  4. 数论总结——更新ing

    数论还是有很多没学完 只是小小的总结 一.同余定理 1.反身性:\(a\equiv a (mod m)\) 2.对称性:若\(a\equiv b(mod m)\),则\(b\equiv a (mod ...

  5. VirtualBox上桥接方式安装CentOS之后借助宿主上网

    VirtualBox上桥接方式安装CentOS之后借助宿主上网: 修改centos文件: 1 vi  /etc/sysconfig/network-scripts/ifcfg-eth0 增加以下几项: ...

  6. Java 类型信息详解和反射机制

    本文部分摘自 On Java 8 RTTI RTTI(RunTime Type Information)运行时类型信息,能够在程序运行时发现和使用类型信息,把我们从只能在编译期知晓类型信息并操作的局限 ...

  7. CentOS GRUB损坏修复方法

    前言 博客很久没有更新了,一个原因就是原来存放部署博客的环境坏了,硬盘使用的是SSD,只要读取到某个文件,整个磁盘就直接识别不到了,还好博客环境之前有做备份,最近一直没有把部署环境做下恢复,今天抽空把 ...

  8. yum 常用命令使用

    1.向服务器上传文件或者下载文件 我们知道我们经常需要向服务器上传文件,或者从服务器下载文件,rz和sz命令可以满足我们的要求, 只不过默认情况下是不能使用的.我们需要使用yum install lr ...

  9. Avoided redundant navigation to current location: "/users"

    问题产生的原因:在Vue导航菜单中,重复点击一个菜单,即重复触发一个相同的路由,会报错,但不影响功能 解决:在router的配置文件中加入如下代码: const originalPush = Rout ...

  10. webpack、node、npm关系

    webpack模块打包 webpack为了正常运行, 必须依赖node环境, node环境为了可以正常的执行很多代码,必须其中包含各种依赖的包 npm工具(node packages manager) ...