Скачать страницу Linkedin - PullRequest
       39

Скачать страницу Linkedin

0 голосов
/ 12 декабря 2018

Если я попытаюсь скачать любую другую страницу, я смогу.Однако, если я пытаюсь загрузить определенную страницу LinkedIn, она печатает кучу JavaScript.

from bs4 import BeautifulSoup
import requests

url = 'https://www.linkedin.com/in/profile/'
response = requests.get(url)

soup = BeautifulSoup(response.content, "html.parser")

print(soup)

результат:

<html><head>
<script type="text/javascript">
window.onload = function() {
  // Parse the tracking code from cookies.
  var trk = "bf";
  var trkInfo = "bf";
  var cookies = document.cookie.split("; ");
  for (var i = 0; i < cookies.length; ++i) {
    if ((cookies[i].indexOf("trkCode=") == 0) && (cookies[i].length > 8)) {
      trk = cookies[i].substring(8);
    }
    else if ((cookies[i].indexOf("trkInfo=") == 0) && (cookies[i].length > 8)) {
      trkInfo = cookies[i].substring(8);
    }
  }

  if (window.location.protocol == "http:") {
    // If "sl" cookie is set, redirect to https.
    for (var i = 0; i < cookies.length; ++i) {
      if ((cookies[i].indexOf("sl=") == 0) && (cookies[i].length > 3)) {
        window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);
        return;
      }
    }
  }

  // Get the new domain. For international domains such as
  // fr.linkedin.com, we convert it to www.linkedin.com
  var domain = "www.linkedin.com";
  if (domain != location.host) {
    var subdomainIndex = location.host.indexOf(".linkedin");
    if (subdomainIndex != -1) {
      domain = "www" + location.host.substring(subdomainIndex);
    }
  }

  window.location.href = "https://" + domain + "/authwall?trk=" + trk + "&trkInfo=" + trkInfo +
      "&originalReferer=" + document.referrer.substr(0, 200) +
      "&sessionRedirect=" + encodeURIComponent(window.location.href);
}
</script>
</head></html>

Я думаю, это связано с загрузкой async.Но я не мог понять, как загрузить страницу.

1 Ответ

0 голосов
/ 13 декабря 2018

Попробуйте: откройте «инкогнито» или «приватное» окно в вашем веб-браузере.Попробуйте перейти на определенную страницу LinkedIn.Вы будете перенаправлены для входа в систему. Вы можете получить доступ к профилю LinkedIn, только если вы вошли в систему.

Как это работает?Когда LinkedIn получает запрос, он ищет в запросе определенный файл cookie с именем li_at.Если он не находит этот файл cookie, он перенаправляет запросчик на страницу с JavaScript, который у вас был.Этот JavaScript служит для перенаправления вас на страницу входа.Вот о чем весь материал window.location.href=.

Вы можете «подделать» зарегистрированный запрос , перейдя в LinkedIn, скопировав свой собственный файл cookie li_at и добавив его вваш запрос.Обратите внимание, что это будет работать только временно: в какой-то момент LinkedIn будет ожидать, что этот файл cookie изменится, и вам придется его повторно скопировать.

Файл cookie можно найти в инструментах разработчика Chrome:

Screenshot of Chrome developer tools

Например:

response = requests.get('https://www.linkedin.com/in/robertakarobin/', headers={
    'cookie': 'li_at=abc123'
})
print(response.content)

Или, в оболочке:

curl -H "cookie: li_at=abc123" -i https://www.linkedin.com/in/robertakarobin/
...