Scrapy Webscraping страница профиля Overwatch
Я очень плохо знаком с Python и вообще программирую. Я пытаюсь создать веб-сканер, который собирает данные со страницы плеера overwatch (например, https://playoverwatch.com/en-gb/career/pc/eu/Taimou-2526). Я попытался использовать portia, и это сработало. в облаке, но я не мог заставить это работать, когда я экспортировал это как код scrapy. Вот скриншот моего порционного паука.
Вот код моего паука (экспортируется из порции в качестве подделки): owData.py
from __future__ import absolute_import
#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from scrapy import Request
from scrapy.linkextractors import LinkExtractor
from scrapy.loader import ItemLoader
from scrapy.loader.processors import Identity
from scrapy.spiders import Rule
from utils.spiders import BasePortiaSpider
from utils.starturls import FeedGenerator, FragmentGenerator
from utils.processors import Item, Field, Text, Number, Price, Date, Url
(Image, Regex)
from items import PortiaItem
class Owdata(BasePortiaSpider):
name = 'owData'
allowed_domains = [u'playoverwatch.com']
start_urls = \
[u'https://playoverwatch.com/en-gb/career/pc/eu/Taimou-2526']
rules = [Rule(LinkExtractor(allow=(), deny='.*'),
callback='parse_item', follow=True)]
items = [[]]
А вот мой код items.py:
from __future__ import absolute_import
import scrapy
from collections import defaultdict
from scrapy.loader.processors import Join, MapCompose, Identity
from w3lib.html import remove_tags
from .utils.processors import Text, Number, Price, Date, Url, Image
class PortiaItem(scrapy.Item):
fields = defaultdict(
lambda: scrapy.Field(
input_processor=Identity(),
output_processor=Identity()
)
)
def __setitem__(self, key, value):
self._values[key] = value
def __repr__(self):
data = str(self)
if not data:
return '%s' % self.__class__.__name__
return '%s(%s)' % (self.__class__.__name__, data)
def __str__(self):
if not self._values:
return ''
string = super(PortiaItem, self).__repr__()
return string
class CareerOverviewOverwatch1Item(PortiaItem):
field1 = scrapy.Field(
input_processor=Text(),
output_processor=Join(),
)
melee_final_blows = scrapy.Field(
input_processor=Text(),
output_processor=Join(),
)
table = scrapy.Field(
input_processor=Text(),
output_processor=Join(),
)
tr = scrapy.Field(
input_processor=Text(),
output_processor=Join(),
когда я запускаю своего паука, используя:
scrapy crawl owData -o data.csv
Я просто получаю пустой файл data.csv. Я предполагаю, что что-то не так с моими вещами? Я думаю, что строка xPath должна быть просто tbody, но опять же, я ничего не знаю о Python, xPath или scrapy...