Apify web scraper игнорирует фрагмент URL - PullRequest
0 голосов
/ 08 июля 2019

У меня есть список URL, который я хочу очистить, поэтому я поместил его в startUrls вот так

"startUrls": [
    {
      "url": "https://www.example.com/sample#000000",
      "method": "GET"
    },
    {
      "url": "https://www.example.com/sample#111111",
      "method": "GET"
    }
  ]

И это отрывок из моего pageFunction кода.

async function pageFunction(context) {
  const { request } = context;
  var name;
  try {
     name = document.querySelector('h1').textContent;
  } catch (e) {
     name = "null";
  }
  return {
     link: request.url,
     name
  };
}

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

я пытался добавить этот бит кода во вторую строку pageFunction

await context.enqueueRequest({
  url: context.request.url,
  keepUrlFragment: true,
});

Но это приводит к другой проблеме, которая приводит к дублирующимся результатам для каждого URL.

Так, что я должен сделать, чтобы заставить это работать правильно?Есть ли другой способ, кроме вызова enqueueRequest для установки keepUrlFragment на true?

1 Ответ

1 голос
/ 09 июля 2019

К сожалению, вы не можете установить keepUrlFragment прямо в startUrls сейчас. Поэтому я предлагаю не использовать их вообще. Вместо этого вы можете передать их как массив в customData. Затем вы можете использовать функцию страницы следующим образом:

async function pageFunction(context) {
  const { request, customData } = context;
  if (request.userData.label === 'START') {
     for (const url of customData) {
        await context.enqueueRequest({
          url,
          keepUrlFragment: true,
        });  
     }
  } else {
     // Your main scraping logic here
  }

}
...