2017-05-09 8 views
0

링크 소독. 웹 심하게 페이지의 특정 부분에 링크가 이전과 링크 후 공백이 포함 된, 모델, 그래서 scrapy은 다음과 웹 서버 (301 개) 만들기 루프로 리디렉션됩니다.Scrapy는 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)), 
) 

웹 코드

<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 

부분은 내가 정규식 등을 사용했지만, 나는 URL을 살균 할 수 경우에 따라 % 20 (공백)을 +로 변경하는 경우도 있습니다.

감사합니다.

+1

당신은 더 URL을 귀하의 질문을 재구성 할 수 있습니까? 현재 처리중인 URL과 현재 출력 및 예상 한 출력을 제공하십시오. –

답변

0

나는 이미 해결했습니다. 다음 코드를 입력하여 URL을 지우고 올바르게 작동하고 있습니다. 나 같은 문제를 가진 다른 사람을 도울 수 있기를 바랍니다.

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

고마워요!

1

당신은 "% 20"과 "+"를 URL의 일부로 언급하고 있습니다. 그래서 나는이 URL들이 인코딩 된 것으로 의심합니다.

그래서 어떤 공백 그들을 제거하기 전에, 당신이 그것을 URLDECODE 필요 :

파이썬 3를 사용 :

: 아직 파이썬 2.7을 사용하는 경우, 당신은 인용을 끝내 라인을 교체해야
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 '\"") 

link_text = urllib.unquote(link_text) 
+0

문제는 페이지가 좌우에 의한 공백 링크가 절대적 URL 인와 조인 할 때, 20 % 및 기타 (인코딩)을 생성하지 않고 URL은 프로그램에 의해 생성된다는 것이다 – Anto