2017-05-09 22 views
0

私はあなたのすべてのリンクを追跡するWebページからデータを取得しようとしています。 Webはひどくモデル化されており、ページの特定の部分のリンクにはリンクの前後にスペースが含まれているため、治療が続き、Webサーバーはループを作成してリダイレクトします。詐欺的なURLリンクのリンク

リンクのURLをフィルタリングしようとしましたが、不可能です。常に空白またはシンボル+が返されます。で、コード

def cleanurl(link_text): 
    print "original: ", link_text 
    print "filter: ", link_text.strip("\s+\t\r\n '\"") 
    return link_text.strip("\s+\t\r\n '\"") 
    #return " ".join(link_text.strip("\t\r\n '\"")) 
    #return link_text.replace("\s", "").replace("\t","").replace("\r","").replace("\n","").replace("'","").replace("\"","") 

rules = (
    Rule (LinkExtractor(allow=(), deny=(), process_value= cleanurl)), 
) 

のWebコード

<a href= 
          "        ?on_sale=1 
          " 
         class="selectBox">ON SALE 
        </a> 

出力cleanurl

original: http://www.portshop.com/computers-networking-c_11257/        ?on_sale=1 

filter: http://www.portshop.com/computers-networking-c_11257/        ?on_sale=1 

パートIは、正規表現などを使用しようとしましたが、私はURLをサニタイズすることはできませんいくつかのケースでは、他の人では動作しない場合は、%20(空白)を+に変更します。

ありがとうございます!

+1

あなたの質問には、さらにURLを書き直すことはできますか?可能であれば、処理しているURLと現在の出力と期待する出力をいくつか与えてください。 –

答えて

0

私はすでに解決しました。次のコードを入力してURLを消去しましたが、正しく動作しています。私と同じ問題を抱えている他の誰かを助けることができれば幸いです。

def cleanurl(link_text): 
    return ''.join(link_text.split()) 

ありがとうございました!

1

"%20"と "+"がURLの一部であると言われています。そのため、これらのURLがURLエンコードされていると思われます。

だから、任意の空白のそれらを除去する前に、あなたはそれをurldecodeする必要があります。

のPython 3を使用する:

import urllib 

def cleanurl(link_text): 
    print "original: ", link_text 
    print "filter: ", link_text.strip("\s\t\r\n '\"") 
    link_text = urllib.parse.unquote(link_text) 
    return link_text.strip("\s+\t\r\n '\"") 

まだPythonの2.7を使用している場合は、あなたがにunquoteライン交換する必要があります。

link_text = urllib.unquote(link_text) 
+0

問題は、URLはプログラムによって作成され、ページにはURLのない左右のスペースがあるリンクがあり、結合すると%20などのエンコードが作成されます。 – Anto

関連する問題