CSDN博客

# -*- coding: utf-8 -*-
import scrapy
import re
from ..items import CategrayItem,ArticleItem
class CsdnSpider(scrapy.Spider):
    name = 'csdn'
    allowed_domains = ['csdn.net']
    start_urls = ['http://blog.csdn.net/column.html']
    base_url = 'http://blog.csdn.net'
    def parse(self, response):
        # 判断是哪一个请求
        if 'column' in response.url :
            divs = response.xpath('//div[contains(@data-mod,"popu_276")]')


            for div in divs:
                img_src = div.xpath('div[@class="column_bg"]/@style').extract_first()
                # print(img_src)
                pattern = re.compile('\((http.*?)\)')
                rs = re.search(pattern,img_src).group(1)
                link = div.xpath('a[@class="column_list_link"]/@href').extract_first('')


                # 拼接完整的url 返回请求对象
                yield scrapy.Request(
                    url=self.base_url+link,
                    meta={'img_src':rs},
                    callback=self.parse_detail
                )


        elif 'home' in response.url:
            print('论坛界面')
    # 解析详情页面
    def parse_detail(self, response):


        # 分类标题
        categray = response.xpath('//h3/a/text()').extract_first('')
        # 将封面单独下载到本地,保存到分类文件夹下
        cate = CategrayItem()
        cate['categray'] = categray
        cate['img_src'] = [response.meta['img_src']]
        yield cate




        lis = response.xpath('//ul[@class="detail_list"]/li')
        # for循环遍历
        for li in lis:
            art_url = li.xpath('h4/a/@href').extract_first('')
            art_title = li.xpath('h4/a/text()').extract_first('')
            date = li.xpath('div[@class="detail_b"]/span/text()').extract_first('')
            look_number = li.xpath('div[@class="detail_b"]/em/text()').extract_first('')
            # 处理item  具体到文章信息的数据
            item = ArticleItem()
            item['categray'] = categray
            item['art_url'] = [art_url]
            item['date'] = date
            item['look_number'] = look_number
            item['art_title'] = art_title


            yield item



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值