Может ли scrapy представить данные на основе идентификатора? - PullRequest
1 голос
/ 09 марта 2019

У меня есть страница интрасети с несколькими полями ввода, мне нужен Scrapy для запуска поиска с использованием поля ввода «поиск товаров» на веб-страницах, он имеет идентификатор «searchBox»

Мне удалось заблокировать правильное окно поиска с помощью Scrapy и Beautiful Soup, но я не уверен, как правильно передать эти данные обратно в функцию отправки формы Scrapys.

В методе 1 я попытался просто передать результаты функции Scrapys FormRequest.from_response в качестве входных данных, но она не работает.

Метод 1 - Использование Scrapy для поиска данных

#Search for products
def parse(self, response):

    ##Let's try search using scrapy only
    sel = Selector(response)
    results = sel.xpath("//*[contains(@id, 'searchBox')]")
    for result in results:
        print (result.extract())   #Print out what scrapy found
    return scrapy.FormRequest.from_response(results, formdata = {'Item': 'Whirlpool Washing Machine'}) #formdata is the data we are sending

Метод 2 - Использование красивого супа для поиска данных

#Search for products
def parse(self, response):

    ##Let's try search using Beautiful Soup only
    soup = BeautifulSoup(response.text, 'html.parser')  
    product_search = []
    product_search.append(soup.find("input", id="searchBox")) 
    print(product_search) #Print what BS found

1 Ответ

0 голосов
/ 10 марта 2019

О варианте скрапа:

  1. Вы должны yield запросить, а не return.
  2. В функции from_response вы должны использовать селектор формы в качестве первого аргумента. Теперь вы передаете туда некоторые входные данные, насколько я мог понять из вашего кода.

Попробуйте что-то вроде:

yield scrapy.FormRequest.from_response(response.css('form'), formdata={'Item': 'Whirlpool Washing Machine'})

Просто исправьте селектор формы в этом выражении. Также проверьте, что еще следует использовать в этом запросе, возможно, некоторые заголовки, файлы cookie и т. Д.

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