如何在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
试试: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>')