爬虫#进阶

本文详细介绍Scrapy爬虫项目的搭建过程,包括项目创建、蜘蛛编写、数据抓取及存储等核心步骤,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建爬虫项目:

   scrapy startproject kgcs(项目名)

2.创建蜘蛛:

     cd kgcs(到此目录下)

     scrapy gensqiber kgcsSpider(蜘蛛名)  www.baidu.com(爬取的网址)

3.创建json文件(在蜘蛛目录下)

     scrapy runspider kgcsSpider.py (蜘蛛文件名)-o kgc.json(创建) -s FEED_EXPORT_ENCODING=utf-8

4.运行蜘蛛(在项目目录下)

    scrapy crawl  kgcsSpider(蜘蛛名)

常用CSS选择器方法

  • 选中所有的E元素,直接元素名
    >>>response.css('img')
  • 选中E1和E2元素,使用‘,’逗号
    >>>response.css('E1,E2')
  • 选中E1后代元素中的E2元素,使用空格
    >>>response.css('E1 E2')
  • 选中E1志愿书中的E2元素,使用‘>’符号
    >>>response.css('E1>E2')
  • 选中包含ATTR属性的元素,使用‘[]’符号
    >>>response.css('[attr]')
  • 选中包含ATTR属性且值为VALUE的元素,使用‘[attr=value]’符号
    >>>response.css('[attr=value]')
  • 选中E元素,且该元素必须是其父元素的第n个子元素,使用‘E:nth-child(n)’
    >>>response.css('E:nth-child(n)')
  • 选中E的第一个子元素,使用‘E:first-child’
  • 选中E的最后一个子元素,使用‘E:last-child’
  • 选中E元素的文本节点,使用‘E::text’

*实例spider蜘蛛

import scrapy
from kgcs.items import *
class KgcsspiderSpider(scrapy.Spider):
    #:蜘蛛名
    name = 'kgcss'
    #:控制访问的的范围
    #allowed_domains = ['kgc.cn']
    #:访问的网站
    start_urls = ["http://www.kgc.cn/list/230-1-6-9-9-0.shtml",]
    #:继承的重写parse方法,通过响应得到数据
    def parse(self, response):
        #css,xpath
        #extract()和extract_first()区别
        #返回数组,返回字符串
        title=response.css("li.course_detail a.yui3-u.course-title-a.ellipsis::text").extract()
        propertys=response.css("span.course-pepo::text").extract()
        qian=response.css("div.right.align-right>span::text").extract()
        image_urls=response.css("a.kgc-w>img::attr('src')").extract()
        #用zip()打包数组000,111,222
        infos=zip(title,propertys,qian,image_urls)
        #循环每一层zip添加到item类中(类似map)item事先定义好了key
        for i in infos:
            item=KgcsItem()
            item["title"]=i[0]
            item["propertys"]=i[1]
            item["qian"]=i[2]
            item["image_urls"]=[i[3]]
            yield item
        next_page=response.css("li.next a::attr('href')").extract_first()
        #寻找下一个网页使用follow()重新调用item
        if next_page is not None:
            yield response.follow(next_page,self.parse)

item(“定义结构化数据”)

import scrapy
class KgcsItem(scrapy.Item):
    # define the fields for your item here like:
    #为项目定义字段
    # name = scrapy.Field()
    #在item定义字段在蜘蛛里面给值
    title=scrapy.Field()
    propertys=scrapy.Field()
    qian=scrapy.Field()
    #图片路径
    image_urls=scrapy.Field()
    #通过路径下载的图片信息[{字典},{字典}]
    images=scrapy.Field()
#images信息
# [{'checksum': '7e46b2ba51f1bd25c741429355dc9eb3',
#     'path': 'full/9d192da26d42270e930217c28278995714e26e71.jpg',
#     'url': 'http://assets.kgc.cn//upload/open/20171020/1508488872993478_thumb.jpg'}]

pipelines(管道)

class KgcsPipeline(object):
    #蜘蛛开启运行创建文件
    def open_spider(self,spider):
        self.file=open("kgc.csv","w",encoding="UTF-8")
    #蜘蛛关闭运行关闭流    
    def close_spider(self,spider):
        self.file.close()
    #每次yeild tiem运行一次填写文件内容    
    def process_item(self, item, spider):
        line=item["title"]+"---"+item["propertys"]+"---"+item["qian"]+"\n"
        self.file.write(line)
        return item

settngs(配置文件)

#设置访问 #如果启用,Scrapy将会采用 robots.txt策略
ROBOTSTXT_OBEY = True
#管道配置
ITEM_PIPELINES = {
   'kgcs.pipelines.KgcsPipeline': 300,
   #启动图片下载
   'scrapy.pipelines.images.ImagesPipeline': 1,
}
#图片的下载目录
IMAGES_STORE = '/home/chenfeng/d_image'

start(运行命令文件)

from scrapy.cmdline import execute
#运行命令文件
if __name__=="__main__":
    execute("scrapy crawl kgcss".split())

爬虫项目目录结构

items.py 负责数据模型的建立,类似于实体类。
middlewares.py 自己定义的中间件。
pipelines.py 负责对spider返回数据的处理。
settings.py 负责对整个爬虫的配置。
spiders目录 负责存放继承自scrapy的爬虫类。

scrapy.cfg scrapy基础配置



承载数据:item

请求对象:request
响应对象:response
引擎: engine
蜘蛛: spider
管道: pipeline
中间件:middleware
调度器:scheduler
1.引擎启动加载中间件
2,启动蜘蛛 请求引擎 交给 调度器排队 给下载器 返回响应 到蜘蛛返回item item如果是请求 在给调度器 下载




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值