scrapy框架的使用、四大模块、

一、使用

scrapy可以使用xpath语法

创建一个项目scrapy startproject dome1

进入项目 cd dome1

指定项目开始爬取的范围scrapy genspider test1 baidu.com

运行项目scrapy crawl test1

通过交互环境测试项目scrapy shell https://www.baidu.com

单词 extractextract_firstcallback

连接追踪
return scrapy.Request(next_url,callback=self.parse,dont_filter=True)

1.四大模块

  • spiders(蜘蛛,网页爬虫)
    • 发布需求,解析下载的内容返回给item pipelines进行保存或者交给管理者继续处理。
  • downloader(下载器)
    • 需求下载地址
  • scheduler(计划员、调度器)
    • 排队等待处理
  • item pipelines(项目管道)
    • 对下载数据的处理(存储)
      • items.py文件是对数据定义格式类型的
      • pipelines.py文件是管道处数量等处理的

spiders发布请求并定义请求内容,对数据进行解析;downloader是下载器进行下载,主要负责对spider的请求进行下载,然后spider会对下载回来的数据进行处理,然后将有用的数据交给item pipelines,进行保存;items.py文件是定义存储的格式的,它的使用方法与字典类似。

1.spiders

内部都是项目对应的爬虫文件

  • yield函数:碰到yield函数,那么他就会去寻找yield赋值给了谁,然后执行yield对应的操作。然后再去执行yield下面的内容。
  • yield返回的内容是交给了pipelines.py文件。
  • 说一下json字符串
    • dumps是编码成json格式
    • loads是解码成python对象

2.ietms.py

定义你要爬取的字段

3.pipelines.py

开启管道:在settings里面搜索300,会发现一个ITEM_PIPELINES = { 'dome1.pipelines.Dome1Pipeline': 300,},把这个打开即为打开管道。

1.首先开启管道

pipelines有多个类可以多设置几个管道 settings里面修改配置文件 可以实现多线程

管道之间的数据可以共享

ITEM_PIPELINES = {
   'myspider.pipelines.MyspiderPipeline': 299,
   'myspider.pipelines.MyspiderPipeline': 300,
   'myspider.pipelines.MyspiderPipeline': 301,
}
#权重越小,他的运行的越快
2.保存数据

将数据从spiders中提取到pipelines中并进行保存

使用:yield

主要的功能是对下载的数据进行保存

class Dome1Pipeline(object):
    def process_item(self, item, spider):
        with open('test2.txt','a+',encoding='utf-8') as f:
            data = json.dumps(dict(item),ensure_ascii=False) + '\n'
            f.write(data)
        return item

这里一定要return item告诉scrapy已经保存完了。

4.middlewares.py

pass

2.配置文件

1.设置提示信息
LOG_LEVEL = 'WARNING'
2.设置头部信息
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
#或者
3.开启管道
ITEM_PIPELINES = {
   'myspider.pipelines.MyspiderPipeline': 300,
}
4.记录到本地文件
LOG_FILE = './log.log'
5.logging的使用
级别 级别数值 使用时机
DEBUG 10 详细信息,常用语调试
INFO 20 程序正常运行中生产的一些信息
WARNING 30 警告用户,虽然程序正常运行,可能发生的错误
ERROR 40 由于更严重的问题,程序不能执行的功能
CRITICAL 50 严重错误,程序不能正常运行
6.方法
方法 作用
logging.warning() 虽然有警告用户的信息,但是程序不报错,继续运行

这种方式可以记录下日志,但是不会指出那个文件报的错

方法 作用
logger = logging.getLogger(__ name __) 将logger指定为当前文件
logger.warning(data) 将spider传入的data打印出来
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章