4

タグ内に含まれるすべての HTML を取得するにはどうすればよいですか?

hxs = HtmlXPathSelector(response)
element = hxs.select('//span[@class="title"]/')

おそらく次のようなものです:

hxs.select('//span[@class="title"]/html()')

編集:ドキュメントを 見ると、 new を返すメソッドのみXPathSelectorList、またはタグ内の生のテキストのみが表示されます。新しいリストやテキストだけではなく、タグ内のソース コード HTMLを取得したい。例えば:

<html>
    <head>
        <title></title>
    </head>
    <body>
        <div id="leexample">
            justtext
            <p class="ihatelookingforfeatures">
                sometext
            </p>
            <p class="yahc">
                sometext
            </p>
        </div>
        <div id="lenot">
            blabla
        </div>
    an awfuly long example for this.
    </body>
</html>

hxs.select('//div[@id="leexample"]/html()')次のように、その中の HTML を返すようなメソッドを実行したいと考えています。

justtext
<p class="ihatelookingforfeatures">
    sometext
</p>
<p class="yahc">
    sometext
</p>

質問のあいまいさが解消されたことを願っています。

HtmlXPathSelectorScrapyから HTML を取得するには? (おそらくスクレイピーの範囲外の解決策?)

4

6 に答える 6

6

に電話.extract()してくださいXpathSelectorList。必要な HTML コンテンツを含む Unicode 文字列のリストを返します。

hxs.select('//div[@id="leexample"]/*').extract()

アップデート

# This is wrong
hxs.select('//div[@id="leexample"]/html()').extract()

/html()有効なスクレイピー セレクターではありません。すべての子を抽出するには、'//div[@id="leexample"]/*'またはを使用します'//div[@id="leexample"]/node()'。は次のような結果node()を返すことに注意してください。textNode

[u'\n',
 u'<a href="image1.html">名前: 私の画像 1 
' ]
于 2012-07-13T04:07:59.257 に答える
3

使用:

//span[@class="title"]/node()

これにより、属性が値を持つspanXML ドキュメント内の任意の要素の子であるすべてのノード (要素、テキストノード、処理命令、およびコメント) が選択されます。class"title"

spanドキュメント内の最初のノードの子ノードのみを取得する場合は、次を使用します。

(//span[@class="title"])[1]/node()
于 2012-07-13T03:46:17.537 に答える
0

@xiaowl が指摘したのと同様に、を使用hxs.select('//div[@id="leexample"]').extract()すると、xPath クエリから取得されたタグのすべての HTML コンテンツが取得されます//div[@id="leexample"]

記録のために、私は次のようになりました。

post = postItem() #body = Field #/in item.py
post['body'] = hxs.select('//span[@id="edit' + self.postid+ '"]').extract()
open('logs/test.log', 'wb').write(str(post['body']))
#logs.test.log contains all the HTML inside the tag selected by the query.
于 2012-07-13T04:30:37.320 に答える
0

実際には、見た目ほど難しくありません。XPath クエリの最後の / を削除して、extract() メソッドを使用するだけです。で例を実行しましscrapy shellた。短縮版は次のとおりです。

sjaak:~ sjaakt$ scrapy shell
2012-07-19 11:06:21+0200 [scrapy] INFO: Scrapy 0.14.4 started (bot: scrapybot)
>>> fetch('http://www.nu.nl')
2012-07-19 11:06:34+0200 [default] INFO: Spider opened
2012-07-19 11:06:34+0200 [default] DEBUG: Crawled (200) <GET http://www.nu.nl> (referer: None)
>>> hxs.select("//h1").extract()
[u'<h1>    <script type="text/javascript">document.write(NU.today())</script>.\n    Het laatste nieuws het eerst op NU.nl    </h1>\n    ']
>>> 

タグの内部コンテンツのみを取得するには、add /* を XPath クエリに使用します。例:

>>> hxs.select("//h1/*").extract()
[u'<script type="text/javascript">document.write(NU.today())</script>.\n    Het laatste nieuws het eerst op NU.nl    ']
于 2012-07-19T09:08:53.140 に答える