FormRequest не возвращает результатов, несмотря на то, что форма выглядит правильно заполненной в ответе - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь очистить часы работы отделений банка Halifax на их официальном веб-сайте поиска филиалов (https://www.halifax.co.uk/branchfinder/search.asp), но я, должно быть, что-то делаю не так в вызове FormRequest.from_response (), потому что ответ на FormRequestпохоже, что он не изменился по сравнению с исходным ответом.

Если передать значение «почтовый индекс» «EH», то должен быть один результат (Эдинбург, улица Принсес, 131, EH2 4AH), как видно, когда вы делаете то же самоечто-то на сайте, но я ничего не получаю, когда делаю это с помощью FormRequest

Это релевантная часть источника сайта:

<form action="" id="branch-finder-search-form" method="post">
    <div style="display:none;" class="notice error" aria-live="assertive"></div>
    <div class="field split-2 clearfix">
        <div class="split radio">
            <div class="field-radio">
                <input value="branch" name="searchType" checked id="r1" type="radio"><label for="r1"><span></span>Branch</label>
            </div>
            <div class="field-radio">
                <input value="cash" name="searchType" id="r2" type="radio"><label for="r2"><span></span>Cash Machine</label>
            </div>
        </div>
    </div>
    <div class="field split-3 clearfix">
        <div class="split">
            <label for="street">Street</label><input name="street" id="street" type="text" value="">
        </div>
        <div class="split">
            <label for="town">Town</label><input name="town" id="town" type="text" value="">
        </div>
        <div class="split last">
            <label for="postcode">Post Code</label><input name="postcode" id="postcode" type="text" value="">
        </div>
    </div>
    <div class="field clearfix">
        <div class="split btn-submit">
            <input id="search" name="search" alt="Search" type="submit" value="Search" class="button button-primary" title="search"><span class="a_hide">ext search</span></input>
        </div>
        <noscript>
            <input value="yes" name="javascriptoff" id="javascriptoff" type="hidden">
            <div class="split btn-submit-nonjs">
                <input name="nonjsSubmit" type="submit" alt="Search" value="Search" class="button button-primary" title="search"><span class="a_hide">ext search</span></input>
            </div>
            <div></div>
        </noscript>
        <div style="display:none" id="no-result">
            <p>No Branch Found as per your search criteria</p>
        </div>
        <div id="branch-finder-results-container">
            <hr>
        </div>
    </div>
</form>

Это мой код до сих пор:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.response import open_in_browser
from scrapy.http import FormRequest
import scrapy


class HalifaxSpider(scrapy.Spider):
    name = "halifax"
    start_urls = [
        "https://www.halifax.co.uk/branchfinder/search.asp"
    ]

    def parse(self, response):
        print(response.text)
        yield FormRequest.from_response(response, formname='branch-finder-search-form', formdata={"postcode": "EH"}, callback=self.open_in_browser)

    def open_in_browser(self, response):
        print(response.text)
        open_in_browser(response)


crawler = CrawlerProcess()
crawler.crawl(HalifaxSpider)
crawler.start()

Я также попытался передать аргумент clickdata = {"name": "search"}, если кнопка поиска не нажата, но я получаю тот же результат.

Я действительно новичок в веб-поиске в целом, поэтому я просто застрял и не знаю, куда идти. Я прочитал некоторую документацию, но мало информацииили учебники при заполненииЯ выбрал все виды различных форм, так что я в растерянности.

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 11 мая 2019

Проверьте следующий подход для получения необходимых данных.Заголовки играют здесь важную роль, поэтому убедитесь, что вы включили это (я уже добавил это).

import scrapy
import urllib
from scrapy.crawler import CrawlerProcess

class HalifaxSpider(scrapy.Spider):
    name = "halifax"
    url = "https://www.halifax.co.uk/asp_includes/branch-finder/branch-finder.asp?"

    def start_requests(self):
        formdata = {
            'street': '',
            'town': '',
            'postcode': 'EH',
            'searchType': 'branch'
        }
        req_url = f'{self.url}{urllib.parse.urlencode(formdata)}'
        yield scrapy.Request(req_url,callback=self.parse)

    def parse(self,response):
        print(response.css("h2#resultTitle1 ::text").getall())

if __name__ == "__main__":
    crawler = CrawlerProcess({'USER_AGENT':'Mozilla/5.0'})
    crawler.crawl(HalifaxSpider)
    crawler.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...