Как получить запрос Scrapy, чтобы перейти на следующую страницу? - PullRequest
0 голосов
/ 19 января 2019

Мне нужно проанализировать код страны каждого комментария на моей веб-странице , а затем сохранить его в файле json, но у меня возникла проблема при попытке перейти на следующую страницу.

Я не уверен, использовал ли я правильный способ отправки запроса.

Вот мой код:

index = 1
def parse_fb(self, response):

    data = response.body
    soup = BeautifulSoup(data, "html.parser")

    with open(ArticlesSpider.pro_id+'.json', 'a+') as f:
        user_country = soup.find_all('div', class_='user-country')
        for i in range(len(user_country)):
            code = str(user_country[i])
            code = code.split('">')
            code = str(code[2])
            code = code.split('</b>')
            code = code[0]
            json.dump(code, f)
            print(code)
    request_url='https://feedback.aliexpress.com/display/productEvaluation.htm'
    data = {
            'ownerMemberId': '',
            'memberType':'seller',
            'productId': str(ArticlesSpider.pro_id),
            'companyId': '',
            'evaStarFilterValue': 'all Stars',
            'evaSortValue': 'sortdefault@feedback',
            'page': str(index),
            'currentPage': '',
            'startValidDate': '',
            'i18n': 'false',
            'withPictures': 'false',
            'withPersonalInfo': 'false',
            'withAdditionalFeedback': 'false',
            'onlyFromMyCountry': 'false',
            'version': 'evaNlpV1_2',
            'isOpened': 'true',
            'translate':  'Y',
            'jumpToTop':'false',
            '${csrfToken.parameterName}': '${csrfToken.token}',
            }
    index += 1
    yield scrapy.FormRequest(request_url,formdata=data,callback=self.parse_fb)

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Зачем вам BeautifulSoup? Все это лишнее. Вот рабочий код для вашего продукта:

import scrapy


class CodeInfo(scrapy.Item):
    code = scrapy.Field()


class feedback_aliexpress_com(scrapy.Spider):
    name = 'feedback_aliexpress_com'
    domain = 'feedback.aliexpress.com'
    allowed_domains = ['feedback.aliexpress.com']
    start_urls = ['https://feedback.aliexpress.com/display/productEvaluation.htm?' +
                  'productId=32911361727&ownerMemberId=206054366&companyId=&memberType=seller&startValidDate=']
    url = 'https://feedback.aliexpress.com/display/productEvaluation.htm'

    page = 1

    def parse(self, response):
        code = CodeInfo()
        if response.css('.user-country'):
            for listing in response.css('.feedback-item'):
                code['code'] = listing.css('.user-country > b::text').extract_first()

                yield code
            self.page += 1
            self.url = 'https://feedback.aliexpress.com/display/productEvaluation.htm?productId=32911361727&ownerMemberId=206054366&page=' \
                       + str(self.page)
            yield response.follow(url=self.url, callback=self.parse)

много лишнего))) знаю))) заценил) сделал на скорую руку

0 голосов
/ 19 января 2019

Ну, вы меняете index, но не используете его: ваш request_url такой же во время процесса. Если этот бит тот, который вы ожидаете изменить страницу

yield scrapy.FormRequest(request_url,formdata=data,callback=self.parse_fb)

чем вы должны изменить request_url перед вызовом этого.

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