如何在Scrapy中仅返回可见文本

1 投票
3 回答
4060 浏览
提问于 2025-04-18 12:11

我在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

试试:text()

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

这个方法适用于所有标签,不仅仅是段落标签。

2

试试这个:

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

请使用来自 scrapy.utils.markup 模块的 remove_tags() 函数

from scrapy.utils.markup import remove_tags

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

撰写回答