将每个robots.txt值存储在一个数组中

问题描述 投票:-5回答:2

如何将某个robots.txt值的值存储在一个数组中,该数组可以通过数组访问。示例:网站有一个robots.txt,如下所示:

# Comment

Disallow: /link1
Disallow: /abcdefg
Disallow: /fish
Disallow: /salad

跳过注释,然后将文本存储到数组中。因此,您不会将值设置为“Disallow:/ link1”,但它将存储为“/ link1”

这是我的代码(来自一些人可能知道的教程):

import urllib.request
import io

def get_robots_txt(url):
    if url.endswith('/'):
        path = url
    else:
        path = url + '/'
    req = urllib.request.urlopen(path + 'robots.txt', data=None)
    data = io.TextIOWrapper(req, encoding='utf-8')
    return data.read()

print(get_robots_txt('http://www.stackoverflow.com'))
input()

上面的内容基本上是一个URL并将所有内容存储在robots.txt中,然后在你去robots.txt时打印出来就像它在网站上看起来一样。我需要的是在那之后只将notallow之后的文本存储到一个数组中,所以它会忽略注释(跳过第一行),然后在第三个删除“Disallow:”并将“/ link1”存储到一个数组中阵列。它会在每一行之后执行此操作,然后我会有一个像[“/ link1”,“/ abcdefg”,“/ fish”,“/ salad”这样的数组]抱歉,如果这是具体的但我完全不知道如何均匀开始做这样的事情。谢谢你的一切

python python-3.x python-requests
2个回答
0
投票
total = []

for line in lines:

    link = line.split(“ “)[1:]

    total.append(link)

这应该工作。如果那不是你想要的,请告诉我。


0
投票

我将您希望的代码放入函数中,以便返回一个列表并自动清除局部变量。

该函数将机器人字符串作为带有可选键参数的参数。它将机器人字符串拆分为一系列行。然后使用": "作为分隔符进行分区,以在元组中返回键,分隔符和值。然后检查密钥以将值附加到新列表。一旦完成循环,它将返回新列表。

def part_robots_txt(robots_txt, key='Disallow'):
    value_list = []
    # Split on '\n' to make a list of lines.
    for line in robots_txt.split('\n'):
        # Part on ': ' to split into (key, sep, value).
        line = line.partition(': ')
        # Check part key with argument key and append to list if True.
        if line[0] == key:
            value_list.append(line[2])
    return value_list

disallow_list = part_robots_txt(data)
print(disallow_list)
© www.soinside.com 2019 - 2024. All rights reserved.