@NoXXik

Scrapy парсит не ту страницу?

В общем, для закрепления знаний по scrapy решил сделать парсер steam вещей из кс го. Столкнулся с проблемой, что первую страницу парсит, и когда подается второй link то прилетают опять данные с первого linka, посмотрев логи понял что ссылка вида https://steamcommunity.com/market/search?appid=730... приобретает вид https://steamcommunity.com/market/search?appid=730 - это и есть первая страница. Получается он парсит одну и ту же страницу дважды, потом выдает ошибку что это повторный парсинг и вырубает паука.

DEBUG: Crawled (200) %20%20%20%205B%5D=any&category_730_StickerCapsule%5B%5D=any&category_730_TournamentTeam%5B%5D=any&category_730_Weapon%5B%5D=any%20%20%20%20&appid=730#p2_popular_desc
> (referer: None)
2020-07-05 20:56:02 [scrapy.core.scraper] DEBUG: Scraped from <200 https://steamcommunity.com/market/search?q=&catego...
%20%20%20%205B%5D=any&category_730_StickerCapsule%5B%5D=any&category_730_TournamentTeam%5B%5D=any&category_730_Weapon%5B%5D=any%20%20%20%20&appid=730>

class ItemParser(scrapy.Spider):
    name = 'steam_items'
    start_urls = ["""https://steamcommunity.com/market/search?q=&category_730_ItemSet%5B%5D=any&category_730_ProPlayer%
    5B%5D=any&category_730_StickerCapsule%5B%5D=any&category_730_TournamentTeam%5B%5D=any&category_730_Weapon%5B%5D=any
    &appid=730#p2_popular_desc"""]

    def parse(self, response):
        count_pages = 6
        page_num = 2
        items = PriceParserItem()

        items_rows = response.xpath('//*[@id="searchResultsRows"]').css("a.market_listing_row_link")

        for row in items_rows:
            name = row.css(".market_listing_item_name::text").extract()
            count = row.css(".market_listing_num_listings_qty::text").extract()
            nprice = row.css(".normal_price::text").extract()[2]
            sprice = row.css(".sale_price::text").extract()
            link = row.css("a::attr(href)").get()

            items['item_name'] = name
            items['item_count'] = count
            items['item_nprice'] = nprice
            items['item_sprice'] = sprice
            items['item_link'] = link
            yield items

            # https://steamcommunity.com/market/search?appid=730#p2_popular_desc
        if page_num < count_pages:
            next_page = """https://steamcommunity.com/market/search?q=&category_730_ItemSet%5B%5D=any&category_730_ProPlayer%
     5B%5D=any&category_730_StickerCapsule%5B%5D=any&category_730_TournamentTeam%5B%5D=any&category_730_Weapon%5B%5D=any
     &appid=730#p""" + str(page_num) + '_popular_desc'
            page_num += 1
            yield scrapy.Request(next_page, callback=self.parse)
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
dimonchik2013
@dimonchik2013
non progredi est regredi
все что после #на сервер не передается

такие сайты парсятся не так

смотри Console что там и куда и откуда
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
Посмотрите откуда берутся данные. Там GET подобного вида
https://steamcommunity.com/market/search/render/?q...
с замечательным JSON в виде ответа.
В цикле быстрей перебрать будет, и вид сразу готовый
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы