练习:ip保存网页内容

有一个存放ip的txt文本,通过读取文本内的所有ip,然后判断该ip的80端口上面有没有部署网站,如果有,就把这个网站首页的内容写入文本

首次理解

1、读取文本内所有ip
2、读取出来的ip拼接下80端口,再通过200状态码判断,存在就写入内容到txt中

import requests
#从文本中获取ip地址
with open( 'ip.txt','r',encoding='utf-8') as a:
    ips = a.read().splitlines()

#判断ip的80端口是否有开,有就将首页内容写在text.txt中
with open('text.txt','w') as a:
    for i in ips:
        url = 'http://'+i+':80'
        try:
            res = requests.get(url)
            if res.status_code == 200:
                a.write(res.content.decode('utf-8')+'\n')
        except:
            continue

image.png

二次理解

用顺序结构的话,后期维护也不方便,或许可以封装成方法的形式;
其实就是文件读取+文件写入;
其中写入时的条件是ip开了80,if url == 'http://:80'是判断是否到了最后一行

#从文本中读取ip
def read(ip):
    with open(ip,'r',encoding='utf-8') as a:
        return a.read().splitlines()
#判断ip是否开放80,开放的话写入在text.txt中
def pd(ips):
    with open('text.txt', 'w', encoding='utf-8')as a:
        for i in ips:
            url = 'http://'+i+':80'
            try:
                res = requests.get(url)
                if url == 'http://:80':
                    continue
                elif res.status_code == 200:
                    a.write(res.content.decode())
            except:
                pass
pd(read('ip.txt'))

image.png

三次理解

想了一下,其实可以拆分成3个模块,这样也许会更好
读取、判断、写入

# 一批ip文本,读取ip,然后判断这个ip的80端口上面有没有部署网站,
# 如果有,就把这个网站首页的内容写入文本
import requests
#从文本中读取ip
def read(ip):
    with open(ip,'r',encoding='utf-8') as a:
        return a.read().splitlines()

#判断ip是否开放80
def pd(ips):
    for i in ips:
        url = 'http://'+i+':80'
        try:
            if requests.get(url).status_code == 200:
                return url
        except:
            pass

#开放的话写入在text.txt中
def xr(url):
    with open('text.txt','w',encoding='utf-8')as a:
        a.write(requests.get(url).content.decode('utf-8'))

ips = read('ip.txt')
urls = pd(ips)
xr(urls)

心得体会

把具体实现的功能点写在方法中,需要用到的话直接调用就行,这样确实方便多了,而且后面有需要对代码调整,只需要修改对应的方法即可;用顺序结构的话,可能就得改很多东西了,而且改了后可能就运行不起来了,后面能用方法表达的尽量用方法,这样不仅可阅读性更好,而且后期维护起来也更方便

posted @ 2023-10-30 16:56  JFSec  阅读(42)  评论(0)    收藏  举报