2017-03-14 18 views
0

私はウェブサイト(https://www.brookfieldproperties.com/portfolio/toronto/bay-adelaide-east/)を掻き取ってlxmlパッケージのWebサイトを見て、何がうまくいかないのか分からないためのガイド(http://docs.python-guide.org/en/latest/scenarios/scrape/lxml xpath()は私が期待しているものを返さない

私はこのコードを持っている:

from lxml import html 
import requests 

page = requests.get('https://www.brookfieldproperties.com/portfolio/toronto/bay-adelaide-east/') 
tree = html.fromstring(page.content) 

floor = tree.xpath('//div[@class="column floor"]/text()') 
sf = tree.xpath('//div[@class="column rsf"]/text()') 

しかしSFは '\ nは\ T \ T \ T \ t' の値ではなく、あなたが期待する整数のリストを返すを(以下の場合には「20」と「5117」)は、実際のウェブサイトからのHTMLを見て:

<div class="availabilityWrap"> 
    <h3>Availabilities</h3> 

    <div class="availabilityRow headerRow"> 
     <div class="column floor"> 

      <a href="/media/img/asset/pdf/BAC-ET-_20th_Floor_-_5100sf.pdf" 
target='blank'><img src="/static/images/pdf.png" class="floorPDF" />20</a> 

    </div> 
     <div class="column rsf"> 
      <p><b>5117</b></p> 
     </div> 
     <div class="column divisible"> 
      <p><b>yes</b></p> 
     </div> 
     <div class="column date"> 
      <p><b>05/01/2017</b></p> 
     </div> 
     <div class="column space"> 
      <p><b>Office</b></p> 
     </div> 
     <div class="column description"> 
      <p><b>model suite</b></p> 
     </div> 
     <div class="column rent"> 
      <p><b>$26.55</b></p> 
     </div> 
    </div> 

は、それだけで「列の床」のdivクラス内のすべてのテキストを返すことはないでしょうか?どんな助けも素晴らしいだろう。

答えて

0
floor = tree.xpath('normalize-space(//div[@class="column floor"])') 

divは、それらはあなたがすべてのテキストを連結し、normalize-space()機能を使用して空白を削除することができ、あまりにもテキストです改行やスペースを得るために\n\t含ま

In [14]: '''<div class="column floor"> 
...: 
...:    <a href="/media/img/asset/pdf/BAC-ET-_20th_Floor_-_5100sf.pdf" 
...: target='blank'><img src="/static/images/pdf.png" class="floorPDF" />20</a> 
...: 
...:  </div>''' 
Out[14]: '<div class="column floor">\n\n   <a href="/media/img/asset/pdf/BAC-ET-_20th_Floor_-_5100sf.pdf"\n target=\'blank\'><img src="/static/images/pdf.png" class="floorPDF" />20</a>\n\n </div>' 

EDIT:

for div in tree.xpath('//div[@class="column floor"]'): 
    print(div.xpath('normalize-space(.)')) # `.` means current node 
+0

ありがとうございます!それは部分的に働いた。 "column floor"という名前のdivクラスのテキストの最初のインスタンスを取得しましたが、ページにはリストに含めることを望んでいる他の多くのものがあります。何か案は? – John

関連する問題