scrapy框架学习

3 篇文章 0 订阅
1 篇文章 0 订阅

一、创建scrapy项目

scrapy startproject [项目名称]

scrapy startproject test0409

二、创建爬虫Spider(Ps: 在创建的项目下面创建spider cd test0409)

1、继承scrapy.Spider类

scrapy genspider [爬虫名] [域名]

scrapy genspider tieba tieba.baidu.com

在这里插入图片描述
1、

scrapy.Resquest(url [, callback, method=‘GET’, headers, body, cookies, meta, dont_filter=Flase])

callback:指定传入的url交给哪个解析函数去处理
meta:实现在不同的解析函数之间进行数据的传递
dont_filter=Flase:默认Flase, url会经过allow_domain过滤。

   yield scrapy.Request(
                self.start_urls[0],
                callback=self.parse,
                cookies= cookies,
            )

2、POST表单提交

yield scrapy.FormRequest.form_response(
				response, # 自动从该响应中找到form表单进行登陆
                formdata={"email": "####", "password":"####"},
                callback=self.***, # 后续处理函数
                
            )
2、继承CrawlSpider类

scrapy genspider -t crawl [爬虫名] [域名]

scrapy genspider -t crawl tieba2 tieba.baidu.com

注意

rules = (
		# 使用正则匹配
        # Rule(
        		LinkExtractor(allow=r'Items/'), 
        		callback='parse_item', 
        		follow=True
        		),
       # 使用xpath匹配
       # Rule(
        		LinkExtractor(restrict_xpaths=("//div/ul/li", )), 
        		callback='parse_item', 
        		follow=True
        		),
    )

在这里插入图片描述

目录结构如下:

一个项目中可创建多个爬虫
在这里插入图片描述

三、爬虫内的信息传递

创建item,自动传递至items.py中

items.py

其中可以定义类型scrapy.Field字段

name = scrapy.Field()

在spider中实例化

form [项目名].items import [项目名]Item
item = [项目名]Item()

实例化一个自定义的item(操作和字典一致)

pipelines.py

实现数据的存储

四、启动爬虫(在项目下启动)

scrpay crawl [爬虫名]

scrpay crawl tieba

settings配置文件的相关

项目自带
BOT_NAME = 'myscrapy'
SPIDER_MODULES = ['myscrapy.spiders']
NEWSPIDER_MODULE = 'myscrapy.spiders'
日志提醒

如果想自定义log格式:网上百度

import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(filename)s[line:%(lineno)d] %(message)s',datefmt='%Y-%m-%d')
logger = logging.getLogger(__name__)

"""
使用日志提醒
"""
LOG_LEVEL = "WARNING"   # 去除日志提醒
LOG_FILE = "./log.log"  # 日志保存在本地
robots协议
 """
    是否遵守robots协议
    """
    ROBOTSTXT_OBEY = False
    """
Cookies

需要携带cookies访问的,可以重写start_requests(self) 函数,指定start_urls的处理方式

使用Cookies之前,别忘了settings
"""
#COOKIES_ENABLED = False # 默认开启
COOKIES_DEBUG = True
下载中间件middlewares
"""
# 下载中间件 手动开启
"""
DOWNLOADER_MIDDLEWARES = {
   'myscrapy.middlewares.MyscrapyDownloaderMiddleware': 543,  # 管道:权重,权重越小优先级越高
}

middlewares.py

1、当每个request通过下载中间件时,该方法被调用。不return。(添加自定义的UA和代理)

 def process_request(self, request, spider):
    	pass

2、当下载器完成http请求,传递响应给引擎使用的时候调用

def process_response(self, request, response, spider):
	return response
item_pipelines 通道
"""
打开item_pipelines 通道
"""
ITEM_PIPELINES = {
   'myscrapy.pipelines.MyscrapyPipeline': 300,
}
USER_AGENT
"""
设置USER_AGENT, 也可以使用最下方的USER_AGENTS_LIST
"""
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'myscrapy (+http://www.yourdomain.com)'
USER_AGENT='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值