scrapy常见问题

本文介绍了Scrapy框架中`dont_filter`参数的用法,用于处理重复请求的情况,例如在翻页抓取时。同时,讲解了如何在Scrapy项目中使用多个Item类,通过`isinstance()`函数判断并处理不同类型的Item实例,将数据保存到不同的文件中。示例展示了如何在pipelines中针对不同Item类进行操作。
摘要由CSDN通过智能技术生成




scrapy常见问题

dont_filter:默认为False,会过滤请求的url地址,即请求过的url地址不会继续被请求

scrapy.Request(url[,callback,method="GET",headers,body,cookies,meta,dont_filter=False])
dont_filter:默认为False,会过滤请求的url地址,即请求过的url地址不会继续被请求,对需要重复请求的url地址可以把它设置为Ture,比如贴吧的翻页请求,页面的数据总是在变化;start_urls中的地址会被反复请求,否则程序不会启动

在这里插入图片描述
在遇到上述翻页情况(没有下一页的按钮)时,也可以使用for循环

 next_page = response.xpath("//div[@class='meta']/div/a")
 if next_page:
 	for i in next_page:
 		next_page_url = i.xpath("./@href").extract_first()
        yield scrapy.Request(url=response.urljoin(next_page_url), callback=self.parse_a, meta={'name':name})

即dont_filter:默认为False,会过滤请求的url地址,即请求过的url地址不会继续被请求



scrapy如何使用多个items模型类

scrapy使用多个item以及指定item进行json输出

items.py

import scrapy


class ZhongGuoErTongWenXueWangItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    title= scrapy.Field()
    zuo_zhe= scrapy.Field()
    text_count = scrapy.Field()

class ZhongGuoErTongWenXueWangItem_1(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    title= scrapy.Field()

pipelines.py

注意一定要在pipelines.py中导入items.py文件中的类


# 注意一定要在pipelines.py中导入items.py文件中的类
from zhong_guo_er_tong_wen_xue_wang.items import ZhongGuoErTongWenXueWangItem,ZhongGuoErTongWenXueWangItem_1

class ZhongGuoErTongWenXueWangPipeline(object):


    def process_item(self, item, spider):
        if isinstance(item,ZhongGuoErTongWenXueWangItem_1):

            print(22222222222222222222222222222222222)
            print(22222222222222222222222222222222222)
            
            with open(item['name']+'.txt','a') as f:
                f.write('题目:'+item['title']+'\n')
                f.write('作者:'+item['zuo_zhe'] + '\n')
                f.write('内容:' + item['text_count'] + '\n')
        else:
            pass
        return item

Python isinstance() 函数

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True
class A:
    pass
 
class B(A):
    pass
 
isinstance(A(), A)    # returns True
type(A()) == A        # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值