Scrapy でオブジェクトを使用してHtmlXPathSelector(response)
います。2 種類のテキスト形式を取得する必要があります。
私の最初のテキストは次の形式です。
<p> Text, text, text, text, text, text, text, text, text </p>
<p>
<p> Text, text, text, text, text. </p>
2 番目のテキストの形式は次のとおりです。
Text, text, text, text, text, text
<br>
<br>
Text, text, text..
<br>
<br>
x.select('//div[@id="texto"]/text()').extract()
2番目ではなく使用すると...次のようなものが得られます。
'content': [u'\r\n ',
u'\r\n',
...
u'\r\n']
私が使用するx.select('//div[@id="texto"]/p/text()').extract()
と、最初のものではなく2番目のものを取得します:
両方の形式を取得するために、一種のルールを使用するにはどうすればよいですか?
アップデート:
次のコードで解決策が得られますが、汚い解決策だと思います。
content = x.select('//div[@id="nota_texto"]/p/text()').extract()
if content == []:
data['content'] = x.select('//div[@id="nota_texto"]/text()').extract()
else:
data['content'] = content
更新 2:
二重スラッシュ//
を使用しても問題ありませんが、HTML には次の形式があるため、テーブルの内容を取得しています。
<div id="texto">
<table>
Undesired content
</table>
Desired content.
</div>
「望ましくないコンテンツ」を取得しないようにするにはどうすればよいですか?
更新 3:
Scrapy ユーザーの Google グループで、Steven Almeroth から回答を受け取りました。
次の兄弟を使用します。
x.select('id("texto")/table/following-sibling::node()').extract()
できます!