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

时间:2017-12-26 00:36:05

标签: python python-3.x python-requests

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

# Comment

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

删除注释,然后将文本存储到数组中。所以你不会有价值和不允许:/ 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"]抱歉,如果这是具体的,但我完全不知道如何开始做这样的事情。谢谢你的一切

2 个答案:

答案 0 :(得分:0)

total = []

for line in lines:

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

    total.append(link)

那应该有用。如果那不是你想要的,请告诉我。

答案 1 :(得分: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)