上一篇文章是在Pycharmz中调试程序,每次调试都比较麻烦,我们可以在scrapy shell中调试。具体步骤如下
之后我们就会看到如下图所示
这里我们只关注response。首先和上文一样,我来提取出文章标题。采用class定位的方法。
再使用extract()方法可提取出内容,并保存在数组中,使用extract()[0]来提取数组中第一个内容,这样子标题就提取出来了,以后我学习如何将其保存到数据库中。
一篇文章不仅包括标题,还有发布时间,类别,点赞数,收藏数,评论数,和正文。接下来,我一个个来提取这些内容。
首先是发布时间,通过WenIDE,找到发布时间
然后使用repalce()方法把点号替换成空格,再用strip()来去掉空格,提取出时间,原理是正确的,但是我的字符总是出错,替换不成功。但是在Pycharm中成功。估计是cmd的问题。
同理,我们可获得其他字段。代码如下
# -*- coding: utf-8 -*-
import scrapy
import re
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/113549/']
def parse(self, response):
title = response.xpath('//div[@class = "entry-header"]/h1/text()').extract()[0]
create_date = response.xpath("//p[@class = 'entry-meta-hide-on-mobile']/text()").extract()[0].strip().replace("·","").strip()
praise_numbers = response.xpath("//span[contains(@class,'vote-post-up')]/h10/text()").extract()[0]
fav_nums = response.xpath("//span[contains(@class,'bookmark-btn')]/text()").extract()[0]
match_re = re.match(".*(\d+).*",fav_nums)
if match_re:
fav_nums = match_re.group(1)
comment_nums = response.xpath("//a[@href='#article-comment']/span").extract()[0]
match_re = re.match(".*(\d+).*", comment_nums)
if match_re:
comment_nums = match_re.group(1)
content = response.xpath("//div[@class='entry']").extract()[0]
在此我提取出了标题,发表日期,点赞数,收藏数,评论数和正文。正文没有经过处理。
对于这篇文章的提取结果如下图