2017-12-26 1 views
-6

robots.txt値の各値を配列に格納するにはどうすればよいでしょうか?例:ウェブサイトには、次のようなrobots.txtがあります。各robots.txt値を配列に格納する

# Comment 

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

コメントをスキップしてから、そのテキストを配列に格納します。だからあなたは文句を言わない「禁止:/リンク1」である値を持っている。ここ

が、それは「/リンク1」として格納されます

(いくつかは知っているかもしれチュートリアルから)私のコードです:

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() 

上記の基本的robots.txtに入ったときにURLを取得してrobots.txt内のすべてを保存し、ウェブサイトに表示されるように印刷します。私が必要としているのは、それを無視した後のテキストを配列に格納するだけなので、コメント(最初の行をスキップする)を無視し、3番目の "Disallow:"を切り捨て、 "/ link1"をアレイ。これは、各行の後にこれを行うでしょう、そして、私は["/ link1"、 "/ abcdefg"、 "/ fish"、 "/ salad"]のような配列を持っています。これは特定ですが、このようなことをやり始めましょう。おかげですべて

+4

http://idownvotedbecau.se/noattempt/ –

答えて

0
total = [] 

for line in lines: 

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

    total.append(link) 

それは動作するはずです。それがあなたが探していたものでないかどうか私に教えてください。

+0

私は私がまだ行われているものに関してはそれを明確にしなかった場合、それは今することができますメッセージ私をより明確にする必要がありますので、言ったことを編集しました – richperson

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) 
関連する問題