Мне нравится указывать URL-адрес, который выглядит следующим образом: https://steamcommunity.com/market/search?appid=730#p1_popular_desc
Поскольку конец является динамическим, я создаю список URL-адресов при разборе, а затем создаю цикл запроса.
Проблема в том, что он обрезает URL после appid = 730 - поэтому каждый URL выглядит одинаково.Если я переключаюсь на dont_filter = true, я вижу, что он снова и снова зацикливается на странице page1.Я не понимаю проблему :(
"x" в коде станет динамическим позже (вот для чего нужен start_url), думаю, что это не имеет никакого отношения к проблеме.
Кажетсяон всегда ползает с URL-адреса реферира, а не с того, который я ему дал. URL может не закончиться к 730.
Отладочное сообщение:
...
2019-03-28 23:44:36 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://steamcommunity.com/market/search?appid=730> (referer: None)
2019-03-28 23:44:37 [scrapy.core.engine] DEBUG: Crawled (200) **<GET https://steamcommunity.com/market/search?appid=730#p7_popular_desc> (referer: https://steamcommunity.com/market/search?appid=730)**
...
2019-03-28 23:44:37 [scrapy.core.scraper] DEBUG: Scraped from <200 https://steamcommunity.com/market/search?appid=730>
{'item_count': u'7,899',
'item_name': u'Prisma Case',
'item_price': u'$2.79 USD',
'item_subtext': u'Counter-Strike: Global Offensive'}
2019-03-28 23:44:37 [scrapy.core.scraper] DEBUG: **Scraped from <200 https://steamcommunity.com/market/search?appid=730>**
{'item_count': u'192,519',
'item_name': u'Danger Zone Case',
'item_price': u'$0.30 USD',
'item_subtext': u'Counter-Strike: Global Offensive'}
allowed_domains = ['steamcommunity.com/market']
start_urls = ['https://steamcommunity.com/market/search?appid=730']
def parse(self, response):
x = 15
steam_xpath = [u'//steamcommunity.com/market/search?appid=730#p'+str(i)+'_popular_desc' for i in range(1, x)]
for link in steam_xpath:
yield Request(response.urljoin(link), self.parse_steam, dont_filter=True)
def parse_steam(self, response):
xitem_name = response.xpath('//span[@class="market_listing_item_name"]/text()').extract()
xitem_price = response.xpath('//span[@class="normal_price"]/text()').extract()
xitem_subtext = response.xpath('//span[@class="market_listing_game_name"]/text()').extract()
xitem_count = response.xpath('//span[@class="market_listing_num_listings_qty"]/text()').extract()
for item in zip(xitem_name, xitem_price, xitem_subtext, xitem_count):
new_item = SteammarketItem()
new_item['item_name'] = item[0]
new_item['item_price'] = item[1]
new_item['item_subtext'] = item[2]
new_item['item_count'] = item[3]
yield new_item
ожидается: 150 результатов, по 10 на каждый URL в цикле.
фактическое: 15 результатов, но каждые 10 раз - все с первого URL.