2015-12-21 95 views
0

我有一系列網頁,我想要從所有不同的模式中刪除文本。我試圖編寫一個提取<br>標籤後的文本的刮板,因爲該結構對所有頁面都是通用的。使用BeautifulSoup在<br>之後提取文本

的頁面遵循以下三個基本模式爲最佳,我可以告訴:

  1. http://www.p2016.org/ads1/bushad120215.html
  2. http://www.p2016.org/ads1/christiead100515.html
  3. http://www.p2016.org/ads1/patakiad041615.html

正如我現在,我用下面的刮迴路:

for br in soup.find_all('br'): 
     text = br.next_sibling 

     try:   
      print text.strip().replace("\t", " ").replace("\r", " ").replace('\n', ' ') 
     except AttributeError: 
      print('...') 

儘管此腳本適用於某些頁面,但僅爲其他頁面獲取部分或全部文本。在過去的幾天裏,我一直在扯掉我的頭髮,所以任何幫助將不勝感激。

此外,我已經嘗試this technique,但無法使其適用於所有頁面。

+0

沒有一個真正的「之間」爲
標籤,因爲沒有啓閉。我認爲你的意思是「之後」,對吧? –

+0

對不起,是的。我將編輯該問題。 – StanO

回答

1

我仍然會繼續依靠span span元素的underline風格。下面是一個示例代碼,應該可以幫助您開始(使用.next_siblings):

for span in soup.select('p > span[style*=underline]'): 
    texts = [] 
    for sibling in span.next_siblings: 
     # break upon reaching the next span 
     if sibling.name == "span": 
      break 

     text = sibling.get_text(strip=True) if isinstance(sibling, Tag) else sibling.strip() 
     if text: 
      texts.append(text.replace("\n", " ")) 

    if texts: 
     text = " ".join(texts) 
     print(span.text.strip(), text.strip()) 
+0

我越是混淆了這一點,看起來越是正確。我得到的輸出是多個字符串,而不僅僅是一個適合csv單元格的字符串。我的輸出腳本有錯嗎? ('p2016ads.csv','wb')作爲csvoutput: writer = csv.writer(csvoutput,delimiter =';',quoting = csv.QUOTE_ALL,quotechar =「|」) writer.writerow [「group」,「text」,「details」,「link」]) rows = zip(org,txt,deets,link) for rows in row: writer.writerow(row)'' – StanO

相關問題