2017-10-18 4 views
1

나는 scrapy에 새로 온 사람이 나의 두 번째 거미입니다 :URL을 치료하기 전에 수정하는 방법은 무엇입니까?

내 문제가 가끔 http://sitename.com/path1/path2/?param1=value1&param2=value2 같은 날에 대한 링크를 가지고있다
class SitenameScrapy(scrapy.Spider): 
    name = "sitename" 
    allowed_domains = ['www.sitename.com', 'sitename.com'] 
    rules = [Rule(LinkExtractor(unique=True), follow=True)] 

    def start_requests(self): 
     urls = ['http://www.sitename.com/'] 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse_cat) 

    def parse_cat(self, response): 
     links = LinkExtractor().extract_links(response) 
     for link in links: 
      if ('/category/' in link.url): 
       yield response.follow(link, self.parse_cat) 
      if ('/product/' in link.url): 
       yield response.follow(link, self.parse_prod) 

    def parse_prod(self, response): 
     pass 

이 PARAM1 중요하지 내가 response.follow 전에 URL에서 제거 할 . 나는 regex으로 그것을 할 수 있다고 생각하지만 그것이 치료를위한 '올바른 방법'이라고 확신하지 못합니까? 어쩌면이 일에 대해 어떤 종류의 규칙을 사용해야합니까?

답변

3

w3lib 님의 라이브러리에서 url_query_cleaner 방법을 사용할 수 있다고 생각합니다. 뭔가 같은 :

from w3lib.url import url_query_cleaner 
... 
.... 
    def parse_cat(self, response): 
     links = LinkExtractor().extract_links(response) 
     for link in links: 
      url = url_query_cleaner(link.url, ('param2',)) 
      if '/category/' in url: 
       yield response.follow(url, self.parse_cat) 
      if '/product/' in url: 
       yield response.follow(url, self.parse_prod) 
+1

그냥, 다른 방법으로 주위를 추가 할 다른 모든 떠나 쿼리 문자열에서 제거 할 매개 변수를 지정하는'URL = url_query_cleaner (link.url ('PARAM1을') = 진정한 제거) '. –