用scrapy shell来测试

1. response.xpath('//div[@id="main_content"]/text()').extract()

提取到的不是空的,就是\n,\t之类的字符

text()是取此xpath内部第一级纯文本,所以只适合提取纯文本,不适合提取html

2.response.xpath('//div[@id="main_content"]').extract()

这次倒是可以提取到html内容了,但是开头包含<div id="main_content" ,结尾包含</div>

不太纯净

3.response.xpath('//div[@id="main_content"]/*').extract()

用这个可以提取到内部的所有html内容,是以列表的形式,要转换成字符串

用"".join(response.xpath('//div[@id="main_content"]/*').extract())就可以了

某些情况下response.xpath('//div[@id="main_content"]/*').extract()也取不到完整的内容

建议用

response.xpath('//div[@id="main_content"]/node()').extract()

参考

4.那怎么提取所有内部纯文本而不是html呢?

直接用"".join(response.xpath('//div[@id="main_content"]//text()').extract())

xpath中一个/只代表提取直接子节点,//可以提取所有子节点

参考