Руководство о том, как бесплатно отображать премиум-контент с помощью простого скрипта Python.

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

Раньше я сдавался и уходил с сайта, потому что не хотел покупать всю подписку. Пока однажды мне не стало любопытно, что находится за главной сценой, чего не может увидеть обычный пользователь. На самом деле, есть несколько довольно популярных веб-сайтов, которые возвращают весь контент статьи, но скрывают его от вас. Хотели бы вы это увидеть? Позвольте мне представить вам, как это делается.

Шаги:

1. Проверьте, скрыта ли полная статья на сайте

На странице со статьей, которую вы хотели бы прочитать, откройте исходный код сайта и попробуйте найти, нет ли случайно следующей части статьи. Если вы найдете его, вы можете прочитать его мгновенно, но это не цель. Текст не будет отформатирован красиво, читабельно, и наша цель — создать простой инструмент, чтобы сделать чтение более удобным :)

Если вы не найдете всю статью в исходном коде, то, к сожалению, вы не сможете использовать наш скрипт, чтобы увидеть весь контент. Скрещенные пальцы!

2. Откройте шаблон для всех статей

При проверке исходного кода обратите внимание на структуру тегов HTML и классы CSS. Если вы выясните, что такое шаблон для каждой статьи, тогда все в порядке.

3. Создайте правильный веб-скребок

Теперь ваших знаний достаточно, чтобы создать простой инструмент, позволяющий прочитать всю статью. Предположения следующие:

  • Скрипт должен получить данные сайта в формате HTML
  • Скрипт должен извлекать определенную часть содержимого веб-сайта.
  • Скрипт создает новый HTML-файл локально и помещает туда полное содержимое статьи.
  • Скрипт автоматически открывает браузер с вашим HTML-документом и чистым содержанием статьи.

Поскольку все готово, давайте перейдем к примеру!

Пример

Я подготовил для вас игровую площадку для проверки примера скрипта. Репозиторий доступен здесь:



Загрузите его и запустите локальный сервер Python, как описано в файле README. Затем перейдите по адресу 127.0.0.1:8000 в своем браузере, и вы должны увидеть поддельный веб-сайт со статьей с ограниченным доступом.

Что ж, есть статья, которую мы хотели бы прочитать, но мы не можем этого сделать, если не купим подписку или… мы не выполним шаги, которые я представил вам выше.

Проверьте, доступна ли вся статья
В этом случае очевидно, что я поместил всю статью в HTML-файл, однако, чтобы помочь вам в этом, откройте инструменты разработчика , смотрите исходный код и… прокручивайте :)
Прокручивайте или ищите последние слова, видимые обычному пользователю, чтобы максимально приблизиться к потенциальному месту, где находится скрытая статья.

Проверьте шаблон
На рисунке видно, что скрытый контент помещен в тег div с классом premiumContent и вся статья хранится в div с классом articleContainer. Это важная информация, которую мы собираемся использовать в нашем скрипте Python.

Создайте веб-скраппер
Во-первых, давайте просто включим передачу URL-адреса в качестве аргумента скрипта. В python мы могли бы сделать это так:

# Read given url
URL = sys.argv[1]

Затем давайте воспользуемся BeautifulSoup и запросами, чтобы получить скрытый контент с целевой веб-страницы. Здесь вы должны использовать свои знания о файловой структуре HTML, так как мы собираемся извлекать теги div с помощью класса с именем articleContainer.

# Get html content
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
# Get all the data that is covered on the website
article_div_content = soup.find("div", class_="articleContainer")

Затем давайте поместим весь этот контент в локально созданный файл HTML. В этом случае я использовал Jinja2 для рендеринга контента в файле HTML. Есть и другие способы сделать это, я выбрал этот.

# Render HTML template file content
templateLoader = jinja2.FileSystemLoader(searchpath="./")
templateEnv = jinja2.Environment(loader=templateLoader)
template = templateEnv.get_template(HTML_TEMPLATE_FILE)
outputText = template.render(content=article_div_content)
# Create HTML file with main content data
with open(HTML_FILENAME, "w") as f:
f.write(outputText)

Теперь, когда у нас должен быть файл HTML, созданный локально, давайте попросим скрипт открыть его автоматически.

# Open ready document in the browser
webbrowser.open('file://' + os.path.realpath(HTML_FILENAME))

Вот и все. Теперь скрипт должен открыть файл без функции скрытия содержимого, и мы сможем прочитать его содержимое полностью.

Чтобы собрать все это воедино, взгляните на приведенный ниже фрагмент кода, а полный код см. в репозитории GitHub.

Это обычное дело?

Честно говоря, может быть. Я проверил несколько веб-сайтов с различными статьями, и некоторые из них изначально не возвращали все содержание статьи, что не позволяло мне получить к ней доступ. С другой стороны, есть некоторые известные порталы, которые сразу возвращают весь контент и скрывают его с помощью JavaScript, что делает статью доступной для нашего скрипта.

Другие решения

Сценарий Python, использующий веб-скраппинг, — не единственное возможное решение. Есть более продвинутые инструменты, которые могут раскрыть скрытую часть статьи на том же сайте. Существуют инструменты командной строки, которые могут получить содержимое веб-сайта и правильно отформатировать его, чтобы он был виден в терминале. В этом случае вас ограничивает только творчество.

Заключительные слова

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

Знание — сила, так что продолжайте любопытствовать и, конечно же, продолжайте читать ;)

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.