创新实训(5)-博客园首页爬虫(一)

创新实训(5)-博客园首页爬虫(一)

1. 定义Item

需要采集标题,url,正文,标签和更新时间。

import scrapy

class CnblogItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 定义需要保存的字段
    title = scrapy.Field()
    url = scrapy.Field()
    content = scrapy.Field()
    tags = scrapy.Field()
    update_time = scrapy.Field()

2. 分析博客园页面,编写spider

2.1 首页URL

https://www.cnblogs.com/sitehome/p/1

NtNZtI.png

通过上图可以看到,博客园的首页共提供了200页博客,并且每一页的格式都是https://www.cnblogs.com/sitehome/p/ 加一个数字。

然后通过数数可以得知,每页共20篇博文。所以,通过博客园的首页我们共可以获得4000条博文。

2.2 博文URL

博文url

通过上图可以看到,每一个博文的链接都是一个带有class="titlelnk"的a标签,使用XPath提取就是

//a[@class="titlelnk"]

这里只需要提取url,spider代码如下

# 获取当前页面的所有博文链接
urls = response.xpath('//a[@class="titlelnk"]/@href').extract()

然后再去根据url获取文章内容:

for url in urls:
            yield scrapy.Request(url=url, callback=self.parse_content)

然后去解析下一页:

if self.offset < 200:        #爬取到第几页
            self.offset += 1
        url2 = self.url+str(self.offset)    #拼接url
        yield scrapy.Request(url=url2, callback=self.parse)

2.3 博文标题

博文标题

根据上图可以看到,博文标题是一个id=cb_post_title_url的a标签,XPath提取:

# 标题
item['title'] = response.xpath('//a[@id="cb_post_title_url"]/text()').extract()
# url
item['url'] = response.xpath('//a[@id="cb_post_title_url"]/@href').extract()

2.4 博文正文

博文内容

通过上图可以看到,博文的正文是一个id=cnblogs_post_body的div标签,XPath提取之:

# 正文
item['content'] = response.xpath('//div[@id="cnblogs_post_body"]').extract()

2.5 博文发布时间

NtwJqU.png

发布时间是id=post-date的span标签

# 发布时间
item['update_time'] = response.xpath('//span[@id="post-date"]/text()').extract()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值