如何将某个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”这样的数组]抱歉,如果这是具体的但我完全不知道如何均匀开始做这样的事情。谢谢你的一切
total = []
for line in lines:
link = line.split(“ “)[1:]
total.append(link)
这应该工作。如果那不是你想要的,请告诉我。
我将您希望的代码放入函数中,以便返回一个列表并自动清除局部变量。
该函数将机器人字符串作为带有可选键参数的参数。它将机器人字符串拆分为一系列行。然后使用": "
作为分隔符进行分区,以在元组中返回键,分隔符和值。然后检查密钥以将值附加到新列表。一旦完成循环,它将返回新列表。
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)