2

假设有一个html字符串...

<div class="content">
   This is some test <b>this is bold </b> this is great list of text.
</div>
<div class="content">
   <ul>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
   </ul>
</div>

现在我想使用 Scrapy 将这两个元素的内容刮到一个变量中。

def parse(self, response):
   hxs = HtmlXPathSelector(response)

   # this returns all nested elements/nodes except text
   contents = product.select('//div[@class="content"]/*').extract()

   # this returns all nested text except elements/nodes
   contents = product.select('//div[@class="content"]/text()').extract()

如何获取两个元素/节点的整个嵌套 HTML 作为变量中的字符串?

4

3 回答 3

1

您可以这样做/node()- 请参阅https://stackoverflow.com/a/10899531/85461以回答类似问题。

# Returns all child nodes - text as well as elements.
contents = product.select('//div[@class="content"]/node()').extract()

请注意,这extract()将返回一个列表,您可以以通常的方式将其连接起来以恢复 HTML:

html = "\n".join(contents)
于 2013-12-15T02:37:29.457 回答
0

如果速度不重要,您可以使用 BeautifulSoup http://www.crummy.com/software/BeautifulSoup/bs4/doc/轻松完成

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(response)
contents = soup.findAll("div", {"class":"content"})
for content in contents:
    print content # this is div html
于 2012-12-20T12:07:39.720 回答
0

以下xpath

//div[@class="content"]/text()|//div[@class="content"]/b/text()|//div[@class="content"]/ul/li  

给出结果,因为您只需要存储两个元素的数据,

contents=product.select('//div[@class="content"]/text()|//div[@class="content"]/b/text()|//div[@class="content"]/ul/li').extract()

现在,内容有两个元素的数据

于 2016-03-09T17:57:30.810 回答