用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中一个/只代表提取直接子节点,//可以提取所有子节点
参考