scrapy爬虫框架 (2. logging模块的使用、yield scrapy.Request()函数间传参)

1.logging模块的使用

1.1scrapy项目中的使用

1.settings.py中设置LOG_LEVEL=“WARNING”
2.settings.py中设置LOG_FILE="./log.log" #这是日志保存的位置,设置后终端就不会显示日志内容
3.程序里进行日志输出:

import logging
logger=logging.getLogger(__name__) #实例化logger
class spider(scrapy.Spider):
	....
	...
	def parse(self,response):
		...
		...
		logger.warning(item)

1.2普通项目

import logging
logging.basicConfig(…) #设置日志格式
logger=logging.getLogger(name) #实例化logger
在任何py文件中调用logger即可

2.同一函数间传数据(常用于翻页请求)

翻页请求:
1.找到下一页地址
2.组装成一个Request对象交给引擎

2.1首先爬取腾讯课堂第一页的代码如下

import scrapy


class NextpageSpider(scrapy.Spider):
    name = 'NextPage'
    allowed_domains = ['qq.com']
    start_urls = ['https://ke.qq.com/course/list?mt=1001&st=2002&tt=3019&price_min=1&page=1']

    def parse(self, response):
        datalist=response.xpath("//div[@class='market-bd market-bd-6 course-list course-card-list-multi-wrap js-course-list']//li")
        for data in datalist:
            item={}
            if data.xpath(".//h4//a/text()").extract_first() !=None:
                item["name"] = data.xpath(".//h4//a/text()").extract_first()
                item["price"] = data.xpath(".//span[@class='line-cell item-price  custom-string']/text()").extract_first()
                item["number"] = data.xpath("normalize-space(.//span[@class='line-cell item-user custom-string']/text())").extract_first()
                print(item)

2.2找到下页的路径,并且注意最后一页的下页路径和第一页的下页路径不一样,根据这个来决定停止

第一页时下页的url地址:
在这里插入图片描述
最后一页时的下页地址:
在这里插入图片描述
根据这个url地址就可以通过yield构造Request对象传给引擎

# -*- coding: utf-8 -*-
import scrapy


class NextpageSpider(scrapy.Spider):
    name = 'NextPage'
    allowed_domains = ['qq.com']
    start_urls = ['https://ke.qq.com/course/list?mt=1001&st=2002&tt=3019&price_min=1&page=1']

    def parse(self, response):
        datalist=response.xpath("//div[@class='market-bd market-bd-6 course-list course-card-list-multi-wrap js-course-list']//li")
        for data in datalist:
            item={}
            if data.xpath(".//h4//a/text()").extract_first() !=None:
                item["name"] = data.xpath(".//h4//a/text()").extract_first()
                item["price"] = data.xpath(".//span[@class='line-cell item-price  custom-string']/text()").extract_first()
                item["number"] = data.xpath("normalize-space(.//span[@class='line-cell item-user custom-string']/text())").extract_first()
                print(item)
        #找到下一页的url地址
        next_url=response.xpath("//a[@class='page-next-btn icon-font i-v-right']/@href").extract_first()
        if next_url != "javascript:void(0);" and next_url != None:
            #通过yield把地址包装成Request请求传向引擎
            yield scrapy.Request(next_url,callback=self.parse)
            #也可以是return scrapy.Request(next_url,callback=self.parse);因为return是将请求传回引擎,引擎会自动判断,如果是请求会再次爬取,是数据就会进行处理。
        else:
            print("end")

3.不同函数间传参

# -*- coding: utf-8 -*-
import scrapy


class NextpageSpider(scrapy.Spider):
    name = 'NextPage'
    allowed_domains = ['qq.com']
    start_urls = ['https://ke.qq.com/course/list?mt=1001&st=2002&tt=3019&price_min=1&page=1']

    def parse(self, response):
        datalist=response.xpath("//div[@class='market-bd market-bd-6 course-list course-card-list-multi-wrap js-course-list']//li")
        for data in datalist:
            item={}
            if data.xpath(".//h4//a/text()").extract_first() !=None:
                item["name"] = data.xpath(".//h4//a/text()").extract_first()
                item["price"] = data.xpath(".//span[@class='line-cell item-price  custom-string']/text()").extract_first()
                item["number"] = data.xpath("normalize-space(.//span[@class='line-cell item-user custom-string']/text())").extract_first()
            	yield scrapy.Request(next_url,callback=self.parse2,meta={"item":item}) ##把数据以字典形式通过meta参数传递给parse2函数
            	
     def parse2(self,response):
     	item=response.meta["item"]   ##取出数据

4.scrapy.Request知识点:

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Scrapy 框架和 XPath 选择器来爬取 www.runoob.com 网页图片,具体步骤如下: 1. 创建 Scrapy 项目并定义 Item 在命令行中输入以下命令,创建一个名为 `runoob` 的 Scrapy 项目: ``` scrapy startproject runoob ``` 然后在 `runoob` 项目文件夹下的 `items.py` 文件中定义 `RunoobItem`,用于存储爬取到的图片信息: ```python import scrapy class RunoobItem(scrapy.Item): image_urls = scrapy.Field() images = scrapy.Field() ``` 2. 创建 Spider 并编写爬虫逻辑 在 `runoob` 项目文件夹下的 `spiders` 文件夹中创建名为 `image_spider.py` 的文件,并编写如下代码: ```python import scrapy from runoob.items import RunoobItem class ImageSpider(scrapy.Spider): name = 'image_spider' allowed_domains = ['www.runoob.com'] start_urls = ['https://www.runoob.com/'] def parse(self, response): item = RunoobItem() # 提取所有图片链接 item['image_urls'] = response.xpath('//img/@src').extract() yield item ``` 在 `ImageSpider` 中,我们首先定义了爬虫的名称 `name`、允许爬取的域名 `allowed_domains` 和起始爬取的 URL 列表 `start_urls`。然后在 `parse` 方法中使用 XPath 选择器提取页面中所有的图片链接,并将其存储到 `item` 中。最后使用 `yield` 将 `item` 递给 Scrapy 引擎。 3. 配置 Scrapy Pipeline 在 `runoob` 项目文件夹下的 `settings.py` 文件中,添加如下配置: ```python ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1} IMAGES_STORE = 'images/' ``` 在这里我们使用 Scrapy 内置的 `ImagesPipeline` 来下载图片,并将下载的图片保存到 `images/` 目录下。 4. 运行爬虫 在命令行中进入 `runoob` 项目文件夹,输入以下命令启动爬虫: ``` scrapy crawl image_spider ``` Scrapy 就会自动爬取 www.runoob.com 页面中的所有图片,并将其下载到 `images/full/` 目录下。 注意:如果运行过程中出现错误,可以尝试安装 Pillow 库(用于处理图片),并重启命令行窗口再次运行爬虫: ``` pip install Pillow ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值