scrapy item loader机制

from scrapy.loader import ItemLoader   #继在jobbole中导入模块
item_loader=ItemLoader(item=JobBoleArticleItem(),response=response)  #JobBoleArticleItem需要与items.py中的类名一致
item_loader.add_css("title",".entry-header h1::text")
item_loader.add_css("create_date","p.entry-meta-hide-on-mobile::text")
item_loader.add_value("url","response.url")
item_loader.add_value("front_image_url","front_image_url")
item_loader.add_value("front_image_path","get_md5(response.url)")
item_loader.add_xpath("praise_nums","//span[contains(@class,'vote-post-up')]/h10/text()")
item_loader.add_xpath("comment_nums","//a[@href='#article-comment']/span/text()")
item_loader.add_xpath("fav_nums","//span[contains(@class,'bookmark-btn')]/text()")
item_loader.add_css("tags","p.entry-meta-hide-on-mobile a::text")
item_loader.add_xpath("content","div.entry")
article_item=item_loader.load_item() #引用

其中由于里面用了css和path两种获取方法,可以任意切换。
from scrapy.loader.processors import MapCompose,TakeFirst,Join#在items.py中导入模块,其中类MapCompos可以传递任意多的函数
def add_jobbole(value):
return value+"-jobbole"

def date_convert(value):
try:
create_date = datetime.datetime.strptime('create_date', "%Y/%m/%d").date()
except Exception as e:
create_date = datetime.datetime.now()
return create_date
def get_nums(value):
match_re = re.match('.*?(\d).*', value)
if match_re:
nums = int(match_re.group(1))
else:
nums = 0
return nums
def remove_comment_tags(value):
# 去掉tag中提取的评论
if "评论" in value:
return ""
else:
return value
def return_value(value):
return value #不变

class JobBoleArticleItem(scrapy.Item):
    title=scrapy.Field(
#input_processor=MapCompose(add_jobbole)#进行预处理
input_processor= MapCompose(lambda x:x+"-jobbole",add_jobbole)
)
create_date=scrapy.Field(
input_processor= MapCompose(date_convert),
output_processor=TakeFirst() #取第一个

)
url=scrapy.Field()
url_object_id=scrapy.Field()
front_image_url=scrapy.Field(
output_processor=MapCompose(return_value)
)
front_image_path=scrapy.Field()
praise_nums=scrapy.Field(
input_processor=MapCompose(get_nums)
)
comment_nums=scrapy.Field(
input_processor=MapCompose(get_nums)
)
fav_nums=scrapy.Field(
input_processor=MapCompose(get_nums)
)
tags=scrapy.Field(
intput_processor=MapCompose(remove_comment_tags),
output_processor=Join(",")







转载于:https://www.cnblogs.com/lin1318/p/8319055.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值