2016-04-14 14 views
0

Bir sayfada metin bulma konusunda sorun yaşıyorum. En büyük kısmı, metnin konumlarının sayfalar arasında değişmesidir.Anahtar kelimeden sonra satır topla

Ben anahtar kelime "Kamp Direktörü"

html örnek içeren çizgi SONRA hat metnini ayıklanması biraz yardım alabilirsem:

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

bu oynamalar:

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 

Daha fazla regex kullanmam gerektiğine inanıyorum ama nasıl kullanılacağını tam olarak bilmiyorum. Yardım çocuklar için teşekkür ederiz!

+0

Lütfen deneyin: 're.findall (' Camp Director. * \ n (. * \ n) ', yanıt. beden) – Quinn

cevap

0

sürece bu biçim bu sizin için çalışması gerekir (İçinde "Camp Direktörü" ile satırdan sonra yeni bir çizgi vardır anlamında) tutarlıdır olarak:.

regex = Camp \ sDirector + strong> \ n \ s * (. *)

Bu, sonraki satırdaki metni yakalar.

+0

Teşekkürler ama bunu nasıl elde edersiniz, böylece onu alabilirim. Çünkü onunla oynadığımda hiçbir şey gösteremiyorum. –

+0

Python kullanıyor musunuz? Sadece bir değişken tanımlayın (örn. Regex = .....) ve daha sonra aşağıdaki gibi bir grup kullanarak yazdırın: print regex.group (1) – AmericanMade

+0

Ben sadece çok yeni, bu yüzden bu işe yaramaz ama scrapy için değil düşünüyorum. benim sözdizimim im gibi bir şeydir: item ["director4"] = re.findall ('Camp Director (\ *)', response.body) –

0

Yardımın için teşekkürler! İhtiyacım olan cevabı buldum. Extract text based on previous and next sibling

Final kodu @AmericanMade ve @Dimitre Novatchev yardımıyla oldu:

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 

Ham satır öğesi [ "yönetmen"] = response.xpath

('// div [içeriyor (text(), "Camp Director:")]/aşağıdaki-kardeş :: text() ')

İlgili konular