python爬取代理ip,python selenium 代理ip

  python爬取代理ip,python selenium 代理ip

  域名解析和IP地址

  域名解析是将域名指向网站空间的IP,方便人们通过注册的域名访问网站的服务;IP地址是在网络上标识站点的数字地址。为了便于记忆,网站地址用域名而不是IP地址来标识。域名解析是指域名到IP地址的转换过程,由DNS服务器进行(例如

  我们先来了解两个知识点。

  1.一个域名同时只能对应一个IP地址

  2.一个IP地址可以解析绑定多个域名,没有限制。

  基于以上知识点,如果我知道IP地址,如何将所有的域名信息解析到IP地址?一种方法是工信部可以打开查询接口进行查询。(不知道开不开?);另一种方法是实现下一个共享的——爬虫。根据IP地址反向查找域名。

  实现原则

  实现原理很简单。目前现有网站提供基于IP地址的域名查询功能,但需要手动登录网站,输入IP地址进行查询。我想让程序自动化,所以我想出了爬行动物的方法。简单来说,就是模拟人的咨询行为,将咨询结果解析成想要的域名列表。

  以site.ip138.com为例,打开F12,输入IP查询,观察控制台请求,检查以下信息。

  所需的方法是GET。

  再者,如果分析Response,页面上看到的绑定域信息就是下图红框中的内容,所以如果可以分析Response的内容,那么获取的内容就可以得到想要的域列表。

  上面的回应是一个HTML页面,用jsoup分析HTML再合适不过了。

  什么是jsoup?

  Jsoup是Java的HTML解析器,直接解析URL地址和HTML文本的内容。提供了一套非常省力的API,可以通过DOM、CSS和jQuery检索和操作数据。

  解析到文档对象

  document=jsoup . parse(result;

  If (document==null) {

  logger . error(jsoupparsegetdocumentnull! );

  }

  //id属性从“列表”中获取元素对象(你不觉得和jQuery很像吗?)

  element list ele=document . getelementbyid( list);

  根据类属性和属性值,过滤元素的元素集(eachText)来遍历元素的内容。

  return list ele . getelementsbyattributevalue( target , _blank )。每个文本);

  结果的内容模拟通过HTTP客户端的HTTP请求。

  http gethttpget=new httpget(URL;

  HTPget.setheader(accept , text /html,application/xhtml xml,application/XML;q=0.9,image/webp,image/apng,*/*;q=0.8 ;

  HTP get . set header( accept-encoding , gzip,deflate )。

  HTP get . set header( accept-language , zh-CN,zh;q=0.9 ;

  HTP get . set header( cache-control , max-age=0 )。

  HTPget.setheader(connection , keep-alive );

  HTPget.setheader(cookie , hm _ lvt _ d 39191 a 0b 09 bb1 EB 023933 edaa 468 cd5=1553090128;百度_ ssp _ LCR=https://。Baidu.com/link?URL=fs 0cc ST 469d 77 dpdxpcgyjhf 7 ostltyk 6 vcmehxt _ 9 _ wd=eqid=fa 0e 26 f 70002 e 7dd 0000065 c 924649;pgv _ pvi=6200530944pgv _ si=s4712839168hm _ lpvt _ d 39191 a 0b 09 bb1 EB 023933 edaa 468 cd5=1553093270 ;

  HTPget.setheader(DNT , 1 );

  HTPget.setheader(host ,host);

  http get . set header( upgrade-unsecured-requests , 1 );

  HTPget.setheader(用户代理, Mozilla/5.0))windows nt 10.0;WOW64 ) appleWebKit/537.36(khtml,像壁虎一样)Chrome/63.0.3239.132

  safari/537.36’);

  string result=http utils . doget(http get);

  HTTP请求工具类

  公共类HttpUtils {

  private static Logger Logger=Logger factory . get Logger(http utils . class);

  公共静态字符串doGet(HttpGet httpGet) {

  closeable http client http client=null;

  尝试{

  http client=http clients . create default();

  请求配置request config=request config . custom()。setConnectTimeout(5000)。setconnectionrequesttime out(10000)。setSocketTimeout(5000)。build();

  http get . set config(request config);

  HttpResponse HttpResponse=http client . execute(http get);

  if (httpResponse.getStatusLine()。getStatusCode()==200

  httpResponse.getStatusLine()。getStatusCode()==302) {

  HttpEntity entity=httpresponse。获取实体();

  返回EntityUtils.toString(实体,‘utf-8’);

  }否则{

  伐木工。错误(请求状态代码={ } ,httpResponse.getStatusLine().getStatusCode());

  }

  } catch(异常e) {

  伐木工。错误(请求异常={ }:,e);

  }最后{

  if (httpClient!=null) {

  尝试{

  http客户端。close();

  } catch (IOException e) {

  logger.error(关闭客户端失败,e);

  }

  }

  }

  返回空

  }

  }

  新增控制器

  @RestController

  公共类DomainSpiderController {

  私有静态记录器记录器=记录器工厂。获取记录器(domainspidercontroller。类);

  @自动连线

  私有域名服务域名服务;

  /**

  * @ param IP 119.75.217.109

  * @返回

  */

  @RequestMapping(/spider/{ip} )

  @ResponseBody

  公共列表域标识(@PathVariable(ip )字符串ip) {

  长启动时间=系统。当前时间毫秒();

  list domains=domainspiderservice。domainspiderofip 138(IP);

  if(domains==null domains。size()==0){

  domains=domainspiderservice。domainspiderofaizan(IP);

  }

  结束时间长=系统。当前时间毫秒();

  logger.info(完成爬虫任务总耗时:{}s ,(结束时间-开始时间)/1000);

  返回域;

  }

  }

  怎么样?是不是很简单?

  优化改进:有时候仅仅通过一个网站查询的域名数据可能不太准确,甚至查询不到数据,我们也没法判断谁才是正确的,所以,可以通过爬取多个网站的结果结合起来使用,例如:dns.aizhan.com

  提出疑问:这些提供根据互联网协议(互联网协议)反查域名的网站,是怎么实现的呢?我咨询过其他人,他们的回答是这些网站收集了很多互联网协议(互联网协议)和域名的对应关系,真实情况是这样的吗?

  示例源码

  域名蜘蛛

  代码已上传至码云和开源代码库上,欢迎下载学习

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: