2
我有一些Python代碼,使用scrapy刮傷bbcode論壇,我需要一個Xpath表達式,只給我發佈的文本,從引號中排除文本。 HTML看起來像這樣:排除特定的子節點與XPath和Scrapy/lxml
<td class="postbody">
hi this is a response
<div class="bbc-block">
<blockquote>
blah blah blah here's a quote
<br>
</blockquote>
</div>
<br>
and now I'm responding to what I quoted
</td>
<td class="postbody">
<div class="bbc-block">
<blockquote>
and now I'm responding to what I quoted
<br>
</blockquote>
</div>
<br>
wow what a great response
</td>
對於每個帖子,每頁會發生多次。我最終想要的只是每個而排除這些塊引用TD節點的文本:
- 你好,這是一個響應\ n和現在我回應什麼,我引述
- 哇什麼了很大的反響
的Python代碼我要提取這些塊如下: - 首先,我將它轉換從scrapy的HtmlResponse到LXML的HtmlElement元素類,因爲這是我能想出使用lxml.html.text_content的唯一途徑()方法:
import lxml.html as ht
def posts_from_response(self, response):
dom = ht.fromstring(response.body)
posts = dom.xpath('//td[@class="postbody"]')
posts_text = [p.text_content() for p in posts]
return posts_text
我搜索過廣泛幾天的解決方案,並嘗試用不同的方法附加到的
'//td[@class="postbody"][not(@class="bbc-block")]'
一打變化,但沒有得到我正是我想用這組我想要。
有沒有1.一種方法來獲得這與一個單一的陳述,或2.一種方法來執行我的posts
列表中的第二個Xpath選擇器以排除bbc塊節點?
謝謝! !第二個陳述起作用(雖然有一些小的語法變化)。我在我的第一個xpath()調用中添加了.extract(),然後迭代unicode結果,創建HtmlElement對象並將它們應用於它們。 – stuart