URL отвечает только с открытым сайтом - PullRequest
0 голосов
/ 30 января 2020

Мне нужно собрать информацию на этой странице веб-сайт .

В инструментах разработчика я нашел эту ссылку с нужными мне ответами.

Проблема в том, что ссылка с ответами открывается только в том случае, если ранее был открыт сайт.

Как я могу очистить эти ответы, если мне нужен открытый сайт?

код:

import scrapy


class AaidSpider(scrapy.Spider):
    name = 'agm'
    starts_urls = [

        'https://www.agmgranite.com/paginate.php?page=1&lid=3&f=reset&invp='
    ]

    def parse(self, response):
        print(response.body)

ответ:

[]

Ответы [ 2 ]

1 голос
/ 31 января 2020

На второй странице должен быть указан повар ie, возвращаемый первой страницей, чтобы правильно получить данные. Вот пример.

from simplified_scrapy.spider import Spider, SimplifiedDoc
from simplified_html.request_render import RequestRender

class ToscrapeSpider(Spider):
  name = 'agmgranite.com'
  allowed_domains = ['www.agmgranite.com']
  start_urls = ['https://www.agmgranite.com/paginate.php?page=1&lid=3&f=reset&invp=']
  refresh_urls = True # For debug. If efresh_urls = True, start_urls will be crawled again.

  def extract(self, url, html, models, modelNames):
    doc = SimplifiedDoc(html)
    print (doc.html)
    return True

  req = RequestRender({ 'executablePath': '/Applications/chrome.app/Contents/MacOS/Google Chrome'})
  # If you need to log in to get the data you want, please rewrite this method
  def login(self):
    self.req.getCookies('https://www.agmgranite.com/inventory/hill-country-spicewood/?f=reset', self._callback,selectorOrFunctionOrTimeout='//div[@class="inv_of"]') # To get csrf_token
    return True
  def _callback(self,cookie,url,data):
    if cookie:
      self.setCookie(url,cookie)
    else:
      self.logged_in = False # If the login is not successful, try again next time

from simplified_scrapy.simplified_main import SimplifiedMain
SimplifiedMain.startThread(ToscrapeSpider())

Вот еще примеры упрощенной терапии здесь

0 голосов
/ 01 февраля 2020

Кажется, что работает следующее, первый URL ссылается на URL с данными.

import scrapy


class spicewood(scrapy.Spider):

    name = "spicewood"

    data_url= "https://www.agmgranite.com/initial_load.php?lid=3&f=reset&invp="

    def start_requests(self):
        urls=[
            "https://www.agmgranite.com/inventory/hill-country-spicewood/?f=reset"
            ]
        for url in urls:
            yield scrapy.Request(url=url,callback=self.second_page)


    def second_page(self):
        data_url = self.data_url
        yield scrapy.Request(url=data_url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'newspicewood-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...