Scrapy возвращает только некоторые значения, затем пустые - PullRequest
0 голосов
/ 08 октября 2018

У меня есть этот скрипт, который отлично работает на уровне scrapy и mysql.Данные вставлены правильно, но сценарий таков: - Я запускаю сканирование, вставляю около 370 товаров - После 370 товаров (иногда это число меняется), значение цены становится нулевым - Сценарий все еще работает, пока я не получу ~ 8000 товаров

_ если я снова запустите сканирование, цена будет пустой с самого начала.- Через некоторое время (>, чем через 1 час) цены возвращаются, пока не достигают ~ 370 пунктов

import scrapy
import urllib
import time
import datetime
import re
import requests
import simplejson
import json
from re import sub
from decimal import Decimal
#from prod.items import ProdItem
from staging.items import StagingItem
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

ts = time.time()
timestamp = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
#pagenb = 0
#pagegrp = 0
class QuotesSpider(scrapy.Spider):
    name = "shopee"


    def start_requests(self):
        shopeecat = [["17101","Home care"],["160","Health & Beauty"],["9824","Grocery"],["9827","Snack food"],["2352","Baby products"]]
        for i in range(len(shopeecat)):
            for pageloop in range(0, 10000,20):
                if pageloop < 10000:
                    url = 'https://shopee.vn/api/v2/search_items/?by=pop&limit=20&match_id=%s&newest=%s&page_type=search&order=desc' % (shopeecat[i][0],pageloop)
                    headers = {
                        "if-none-match-": "55b03-c72444ae4e056f6e58a1d9eab26d36d4",
                        "accept-encoding": "gzip, deflate, sdch, br",
                        "x-requested-with": "XMLHttpRequest",
                        "accept-language": "en-SG,en;q=0.8,en-US;q=0.6,zh-CN;q=0.4,zh;q=0.2,vi;q=0.2,fr;q=0.2",
                        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36",
                        "x-api-source": "pc", 
                        "accept": "*/*",
                        "referer": "https://shopee.vn/S%E1%BB%A9c-Kh%E1%BB%8Fe-S%E1%BA%AFc-%C4%90%E1%BA%B9p-cat.160",
                        "authority": "shopee.vn"
                    }
                    meta={"acategory": shopeecat[i][1]}
                    request = scrapy.Request(url=url, callback=self.parse, meta=meta, method='GET', headers=headers)
                    yield request

    def parse(self, response):
        print response.headers
        jsonresponse = json.loads(response.body)
#       print jsonresponse
        for product in jsonresponse['items']:
            item = StagingItem()
            item['collector_sku'] = product['name']
            linkname = "https://shopee.vn/" + product[u'name'].replace(' ', '-') +"-i."+str(product['shopid'])+"."+str(product['itemid'])
            if 'price_before_discount' in product:
                apromo = product['price_before_discount']
                print "yes promo"
                print product['price_before_discount']
            else:
                apromo = ''
                print "no promo"
            item['collector_price_promo'] = apromo
            item['collector_retailer'] = 'Shopee'
            item['collector_url'] = linkname
            aimage = "https://cf.shopee.vn/file/" + product['image']
            item['collector_photo_url'] = aimage
            item['collector_brand'] = product['brand']
            item['collector_quantity'] = 'NA'
            item['collector_category'] = response.meta["acategory"]
            if 'price' in product:
                aprice = product['price']
                print "yes price"
                print product['price']
            else:
                aprice  = ''
                print "no price"
            item['collector_price'] = aprice
            item['collector_timestamp'] = timestamp
            item['collector_local_id'] = product['itemid']
            item['collector_location_id'] = ''
            item['collector_location_name'] = ''
            item['collector_vendor_id'] = product['shopid']
            item['collector_vendor_name'] = ''
            yield item

Возможно ли, что сайт заблокирует скрапинг только после того, как куча предметов будет списана?Кажется странным, почему блокировка на стороне контента, только на цены?остальное содержание в порядке (name, url, ...), только цена и цена акции становятся нулевыми.Я не могу воспроизвести случай из браузера с веб-сайта, но в ответе «скрап» ясно показаны пустые цены после нескольких соскобов

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...