2016-03-18 42 views
0

我無法讓scrapy從此div中返回文本。當它確實返回數據時,它比我想象的要多得多。無法讓Scrapy返回Div中的文本

目標HTML:

<div class="DivTimeSpan" title="Full Time">12:00 PM - 09:00 PM </div> 

嘗試1:

def parse_schedule(self, response): 
    s_item = ScheduleItem() 

    for sel in response.xpath("//div[@class='DivTimeSpan']"): 
     s_item['schedule'] = sel.select('//text()').extract() 
    return s_item 

返回:

爲 「\ r \ n \ r \ n」, 「\ r \ n」 個, 「\ r \ n \ r \ n \ r \ n var allowedUrls = []; \ r \ n allowedUrls.push(\」Login.net \「); \ r \ n allowedUrls.push(\」Login \「) ; \ r \ n allowedUrls.push(\「AccountLogin.net \」); \ r \ n allowedUrls.push(\「AccountLogin \」); \ r \ n allowed Urls.push(\「CreateAccount \」); \ r \ n allowedUrls.push(\「CreateAccount.net \」); \ r \ n allowedUrls.push(\「UpdateAccount \」); \ r \ n allowedUrls.push (\「UpdateAccount.net \」); \ r \ n allowedUrls.push(\「CreateResellersAccount \」); \ r \ n allowedUrls.push(\「CreateResellersAccount.net \」); \ r \ n allowedUrls.push( 「CreateQqestSAASAccount」); \ r \ n
「11:00 AM - 09:00 PM」,「12:00 PM - 09:00 PM」,「12:00 PM - 09:00 PM」,「 12:00 PM - 09:00 PM」,‘下午12:00 - 09:00 PM’

整個文件可能是成千上萬行的長,並且包含什麼樣子的文字從我指定的div外

我明白了// text()返回元素的文本及其chil德倫。我所針對的html元素沒有任何子元素,所以我認爲它只會返回div中的數據。

接下來我試着用「/ text()」。這是唯一的變化

嘗試2:

for sel in response.xpath("//div[@class='DivTimeSpan']"): 
     s_item['schedule'] = sel.select('/text()').extract() 
    return s_item 

返回:

[{ 「時間表」:[]}]

所需的結果:

[{「schedule」:[「11:00 AM - 09:00 PM」,「12: 00 PM - 09:00 PM「,」12:00 PM - 09:00 PM「,」12:00 PM - 09:00 PM「,」12:00 PM - 09:00 PM「]}]

我刮的網址是在公司登錄後面,所以我不能給出實際的網址。

以利沙的帖子引導我在正確的方向,謝謝! :) 答案:

for sel in response.xpath("//div[@class='DivTimeSpan']"): 
    s_item['schedule'] = map(unicode.strip, sel.select('//div/text()').extract()) 
return s_item 

回答

0

第二次嘗試更接近提取值。然而,你需要從文檔根提取節點的文本,而不是:

s_item['schedule'] = sel.select('/div/text()').extract()[0] 

如果文檔中包含多個標籤(不是DIV S),你可以嘗試:

s_item['schedule'] = sel.select('//div/text()').extract()[0]