2016-03-02 2 views
1

У меня есть следующий паук:Scrapy извлечь только часть URL

start_urls = ['https://www.youtube.com/user/ZaidAliT/videos'] 

def parse_question(self, response): 
    yield { 
     'title': response.css('h1 span::text').extract()[0], 
     'views': response.css('div .watch-view-count::text').extract()[0], 
     'link': response.url, 
    } 

В настоящее время, когда я разобрать, я получаю целые звенья канала в response.url как следующее:

"link": "https://www.youtube.com/watch?v=qEybDk00rJE" 

Как мне изменить это так, что я извлекаю только часть qEybDk00rJE из URL-адреса?

ответ

2

Попробуйте

'link'=response.url.split('=')[-1] 

Это возвращает все после последнего '='

2

Я полагаю, вы хотите полный запрос, если вы хотите, чтобы разобрать URL, используйте urlparse:

In [1]: import urlparse 

In [2]: url = "https://www.youtube.com/watch?v=qEybDk00rJE" 

In [3]: parsed = urlparse.urlparse(url) 

In [4]: parsed 
Out[4]: ParseResult(scheme='https', netloc='www.youtube.com', path='/watch', params='', query='v=qEybDk00rJE', fragment='') 

In [5]: parsed.query 
Out[5]: 'v=qEybDk00rJE' 

Если вы действительно хотите только то, что приходит после =, вы можете разбить запрос.

.