Scrapy: проверьте, содержит ли страница элемент HTML Form - PullRequest
1 голос
/ 10 октября 2019

Мне нужен скрипт Scrapy, который просматривает весь веб-сайт и сохраняет только те страницы, на которых есть тег form HTML.

Вот мой текущий подход, который не работает должным образом

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

    class MySpider(CrawlSpider):
        name = 'mps'
        allowed_domains = ['some.url.com']
        start_urls = ['https://some.url.com/']

        rules = (
            Rule(LinkExtractor(), callback='parse_item', follow=True),
        )

        def parse_item(self, response):
            hasForm = response.xpath("//form[@id = 'aspnetForm']/form").extract_first(default='not-found')
            if hasForm == 'not-found':
                pass
            else:
                filename = response.url.split("/")[-2] + '.html'
                with open(filename, 'wb') as f:
                    f.write(response.body)
                pass

Обновление:

Мне также нужно исключить form с определенным идентификатором

1 Ответ

0 голосов
/ 10 октября 2019

Пример

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class MySpider(CrawlSpider):
    name = 'mps'
    allowed_domains = ['some.url.com']
    start_urls = ['https://some.url.com/']

    rules = (
        Rule(LinkExtractor(), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        hasForm = response.xpath("//form").extract_first(default='not-found')            
        if hasForm != 'not-found':
            page = response.url.split("/")[-2]
            filename = 'test-%s.html' % page
            with open(filename, 'wb') as f:
                f.write(response.body)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...