Walks

网络安全爱好者

Python3学习系列(六):Scrapy爬取Walks个人博客文章信息并保存

《Python3学习系列(六):Scrapy爬取Walks个人博客文章信息并保存》

前言:

说完理论,总要说说实战,下面说的就是爬取我的个人博客文章标题,链接,访问者等的实战内容 


目录:

0x01:爬取思路

0x02:代码实现与分析

 

0x01 爬取前奏

我们在开始我们的爬虫之前,第一步要做的是什么?当然是分析网站,构思爬取全过程了。

所以,一开始说的就是爬取思路。

对我的Walks个人博客爬取思路:知道我们要爬取什么-》定位要爬取的元素-》访问文章页-》下载HTML-》提取目标数据-》处理爬取数据

0x02 代码实现和分析

  • Items.py

import scrapy

#定义一个存储数据的类,用来存储数据
class MyblogcontentItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    #pass
    #要存储的数据,标题,时间,地址,访问量
    title = scrapy.Field()
    time = scrapy.Field()
    address = scrapy.Field()
    visites = scrapy.Field()

  • Spiders/Walks_Spider.py

#encoding=utf-8
#导入爬虫类
import scrapy
#导入我们刚才建立的存储数据的类
from MyblogContent.items import MyblogcontentItem

class WalksSpider(scrapy.Spider):
    #唯一标识符
    name = "Walks"
    #允许的域名(只可以从这个域名中爬取)
    allowed_domains = ['bywalks.com']
    #开始爬取的地址
    start_urls = [
        "http://www.bywalks.com"
        ]
    
    #对爬取的数据(HTML)进行提取
    def parse(self,response):
        #调用Selector,sel就是返回的HTML
        sel = scrapy.selector.Selector(response)
        #定位爬取数据
        sites = sel.xpath("//div[@id='kratos-blog-post']/div/div/section/article")
        items = []
        for site in sites:
            item = MyblogcontentItem()
            #从HTML中提取数据
            item["title"] =site.xpath("div/div[@class='kratos-post-inner-new']/header/h2/a/text()").extract() 
            item["time"] = site.xpath("div/div[@class='kratos-post-meta-new']/span[1]/a[1]/text()").extract() 
            item["address"] =site.xpath("div/div[@class='kratos-post-meta-new']/span[1]/a[1]/@href").extract()
            item["visites"] = site.xpath("div/div[@class='kratos-post-meta-new']/span[2]/a[1]/text()").extract()
            
            items.append(item)
        return items

  • pipelines.py

class MyblogcontentPipeline(object):
    #对提取出来的数据进行存储
    def process_item(self, item, spider):
        #打开Walks.json文件,不存在就新建    
        with open('Walks.json','a+') as f:
            #写入我们爬取的数据   
            f.write("title = "+str(item["title"])+'\n')
            f.write("time = "+str(item["time"])+'\n')
            f.write("address = "+str(item["address"])+'\n')
            f.write("visites = "+str(item["visites"])+'\n\n')
        #返回item,给下一个处理函数处理(如果有的话)
        return item

  • sittings.py

BOT_NAME = 'MyblogContent'

SPIDER_MODULES = ['MyblogContent.spiders']
NEWSPIDER_MODULE = 'MyblogContent.spiders'
#上面都是直接生成了的,不用添加
#下面使我们自己需要添加的代码,意思就是当我们提取了所需要的数据之后,把数据传入Pipeline里面进行处理,也就是我们上面的py文件
#为什么要添加呢?因为pipeline不是一个爬虫所必须的功能,我们可以自己加也可以不加,所以当需要的时候,我们需要设置下
ITEM_PIPELINES = {  
    'MyblogContent.pipelines.MyblogcontentPipeline':300  
}

#是否遵循网站robots.txt的规则
ROBOTSTXT_OBEY = False

最后附带一张爬取的数据图片

《Python3学习系列(六):Scrapy爬取Walks个人博客文章信息并保存》

 转载请注明来自:www.bywalks.com

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

16 − 15 =