【发布时间】:2018-07-30 15:52:08
【问题描述】:
我正在尝试弄清楚如何将正则表达式与 scrapy 项目加载器一起使用。 我尝试使用带有 split() 的 lambda 函数并得到以下错误。 无法定义拆分。您可以看到该函数在项目加载器类中被注释掉了。
我要做的是删除日期之前的所有文本,包括“/” 日期项目。日期项是我刚刚解析的 url
“https://www.sofascore.com/tennis/2018-02-07”
如何将正则表达式与 scrapy 项目加载器一起使用? 我可以将正则表达式传递给项目加载器还是必须在蜘蛛上处理它?
蜘蛛.py
import scrapy
from scrapy_splash import SplashRequest
from scrapejs.items import SofascoreItemLoader
from scrapy import Spider
import json
from scrapy.http import Request, FormRequest
class MySpider(scrapy.Spider):
name = "jsscraper"
start_urls = ["https://www.sofascore.com/tennis/2018-02-07"]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url,
callback=self.parse,
endpoint='render.html',
args={'wait': 1.5})
def parse(self, response):
for row in response.css('.event-team'):
il = SofascoreItemLoader(selector=row)
il.add_css('winner' , '.event-team:nth-child(2)::text')
il.add_css('loser' , '.event-team:nth-child(1)::text')
il.add_value('date', response.url)
yield il.load_item()
items.py
import scrapy
from scrapy.loader import ItemLoader
from scrapy.loader.processors import TakeFirst, MapCompose, Split
from operator import methodcaller
from scrapy import Spider, Request, Selector
class SofascoreItem(scrapy.Item):
loser = scrapy.Field()
winner = scrapy.Field()
date = scrapy.Field()
class SofascoreItemLoader(ItemLoader):
default_item_class = SofascoreItem
default_input_processor = MapCompose(methodcaller('strip'))
default_output_processor = TakeFirst()
#review_in = MapCompose(lambda x: x.split("/" , [-1]))
【问题讨论】:
-
review_in输入处理器必须有一个值来拆分它,对吗?我没有看到你在parse方法中设置它的值。
标签: python regex web-scraping scrapy