2016-04-14 38 views
0

我無法在頁面中找到一些文本。最大的部分是因爲文本的位置在頁面之間改變。關鍵字後收集線

如果我能得到一些幫助提取文本行的行之後包含關鍵字「營主任」

HTML例如:

<div class="span4"> 
        <strong>Camp Director : </strong> 
              <span>Camp Directors Name</span> 
            </div> 

我玩這個周圍:

def parse1(self, response): 
hxs = Selector(response) 
titles = hxs.xpath('//*[@id="fullwidth-container"]') 
body = hxs.xpath('/html/body') 
items = [] 

for titles in titles: 
    item = BayItem() 

    item["director"] = "".join(response.css('#fullwidth-container > div > div > div.geobase.complex-module-container.module > div.geobase-listing > div > div.premium.row-fluid.complex-module-columns-container > div.span8.respond-container.main-block > div.custom-field.geobase-cf-text > div:nth-child(4) > div:nth-child(3) > span').extract()) 
    item["director1"] = titles.xpath('//*[@id="fullwidth-container"]/div/div/div[1]/div[1]/div/div[2]/div[1]/div[3]/div[3]/div[2]/span').extract() 
    item["director2"] = titles.xpath('//*[@id="fullwidth-container"]/div/div/div[1]/div[1]/div/div[2]/div[1]/div[4]/div[3]/div[2]/span').extract() 
    item["director3"] = titles.xpath('//*[@id="fullwidth-container"]/div/div/div[1]/div[1]/div/div[2]/div[1]/div[5]/div[4]/div[2]/span').extract() 
    item["director4"] = re.findall('Camp Director(\*)', response.body) 
    converter = html2text.HTML2Text() 
    converter.ignore_links = True 
    items.append(item) 
    return items 

林有點傾向於我可能不得不使用更多的正則表達式,但我不完全確定如何使用它。所以,感謝幫助傢伙!

+0

請嘗試:'re.findall('Camp Director。* \ n(。* \ n)',迴應。身體)' – Quinn

回答

0

只要這種格式是一致的(意思是有以「營主任」在這行後,新行),這應該爲你工作:

正則表達式=營\ sDirector + STRONG> \ n \ s *(。*)

這將捕獲下一行中的文本。

+0

謝謝,但你會如何填充到一個項目,以便我可以得到它。因爲當我玩弄時我無法展示任何東西。 –

+0

你在用Python嗎? 只是定義一個變量(即正則表達式= .....),然後使用類似的東西打印組: print regex.group(1) – AmericanMade

+0

沒有即時通訊在scrapy中使用它。我只是非常新的,所以我認爲這會工作,但不適用於scrapy。我的語法im尋找類似於: item [「director4」] = re.findall('Camp Director(\ *)',response.body) –

0

感謝您的幫助!我找到了我需要的答案。從@AmericanMade和@Dimitre Novatchev幫助上Extract text based on previous and next sibling

最後的代碼是:

def parse1(self, response): 
hxs = Selector(response) 
titles = hxs.xpath('//*[@id="fullwidth-container"]') 
items = [] 

for titles in titles: 
    item = BayItem() 
    item["director"] = response.xpath('//div[contains(text(), "Camp Director : ")]/following-sibling::text()') 
    converter = html2text.HTML2Text() 
    converter.ignore_links = True 
    items.append(item) 
    return items 

原線

項目[ 「導演」] = response.xpath('// DIV [包含( (),]「/ follow-sibling :: text()')