如何在使用Scrapy时仅返回可见文本

时间:2014-07-05 12:39:29

标签: python scrapy

我在Windows Vista上使用Python.org版本2.7 64位。我有以下代码:

from scrapy.spider import BaseSpider
from scrapy.selector import Selector

class MySpider(BaseSpider):
    name = "wiki"
    allowed_domains = ["bbc.co.uk"]
    #start_urls = ["http://www.bbc.co.uk/sport/0/"]
    start_urls = ["http://www.bbc.co.uk/sport/0/formula1/28166984"]

    def parse(self, response):
        titles = response.selector.xpath("//title")
        for titles in titles:
            body = response.xpath("//p").extract()
            body2 = str(body)
            body2.replace('\n', '')
            body2.replace('<p>', '')
            print body2

这是在返回我试图抓取的页面的主要文本,但它也返回了大量的HTML标记和回车。在最后几行中你可以看到我已经尝试将变量'body'转换为一个名为'body2'的字符串,然后使用replace函数删除一些不需要的HTML,但是这没有达到预期的效果。

有人能建议一种实现我想做的事情吗?

由于

3 个答案:

答案 0 :(得分:5)

请使用remove_tags()模块

中的scrapy.utils.markup功能
from scrapy.utils.markup import remove_tags

# it'll print 'hello, world'
print remove_tags('<p>hello, world</p>')

答案 1 :(得分:2)

尝试:

response.selector.xpath("normalize-space(//title)")

答案 2 :(得分:0)

尝试: text()

response.xpath("p/text()").extract()

这适用于所有标签,不仅适用于段落