2015-10-08 3 views
1

Я использую Scrapy сканирование сайтаScrapy URL запроса происходит неправильно

Моя проблема, когда я достаю url из href я получаю в URL %20. Таким образом, чтобы удалить, что я использовал раскол и получил нужный URL

Для примера:

Оригинальный URL: http://www.example.com/category/%20

Мой модифицированный URL выглядит следующим образом: http://www.example.com/category/

Так что я m, давая мой модифицированный url к Request методу, но все еще запрос метода принимает оригинал url не измененный url

Моей синтаксический анализ и извлечение методы ниже

def parse(self, response): 
    sel = Selector(response) 
    requests = [] 

    # Get Product Reviews 
    for url in sel.xpath('//div[contains(@id,"post")]/div/div[2]/h3/a/@href').extract(): 
     url = url.encode('utf-8').split('%')[0] 
     requests.append(Request(url, callback=self.extract)) 

    for request in requests: 
     print request.url 
     yield request 

def extract(self, response): 
    sel = Selector(response) 
    requestedItem = ProductItem() 
    requestedItem['name'] = sel.xpath('//*[@id="content-wrapper"]/div/div[1]/div[1]/div/div/h1/text()').extract()[0].encode('utf-8') 
    requestedItem['description'] = sel.xpath('//*[@id="content-wrapper"]/div/div[1]/div[2]/div/div/div[1]/p/text()').extract()[0].encode('utf-8') 

    yield requestedItem 

Так, пожалуйста, любые один помочь мне в решении этого вопроса

+0

Вы можете вставить ошибку, что вы получите в лоскутной? – sergiuz

+0

Я не получаю никаких ошибок, но когда я попробовал свой оригинальный 'url' в' Request', он перенаправляется на страницу по умолчанию, поэтому я хочу удалить эту неправильную функциональность и перенаправить на «измененный url» –

+0

. Будет пространство в конце модифицированного URL. – WannaBeCoder

ответ

3

Пожалуйста, обратите внимание на следующий ответ (и связанный с ним вопрос): Scrapy: URL error, Program adds unnecessary characters(URL-codes)

Как видите, в URL добавляется пробел. Для этого вы можете либо normalize-space, когда вы выберете URL-адрес, либо просто strip, прежде чем вы подадите запрос.

Это потому, что% 20 - это простое пространство, которое вызывается только при вызове URL-адреса, и вы не видите %20 в конце вашего URL-адреса.

Таким образом, вместо того, чтобы использовать

url = url.encode('utf-8').split('%')[0] 

Вы можете

for url in sel.xpath('normalize-space(//div[contains(@id,"post")]/div/div[2]/h3/a/@href)').extract(): 
    requests.append(Request(url, callback=self.extract)) 

или

for url in sel.xpath('//div[contains(@id,"post")]/div/div[2]/h3/a/@href').extract(): 
    requests.append(Request(url.strip(), callback=self.extract)) 

 Смежные вопросы

  • Нет связанных вопросов^_^