TL;DR: я написал много статей среднего размера, и мне требовалось так много времени и усилий, чтобы обновлять мою домашнюю страницу любыми новыми сообщениями в блоге. Вот почему я решил делать автоматическое обновление каждый раз, когда публикую на Medium. Моя домашняя страница работает на Python, что позволяет очень легко получить ссылки с помощью парсинга.

Нам нужно установить и импортировать следующие библиотеки:

from bs4 import BeautifulSoup ## for web scraping
import urllib.request
import re ## regex
from linkpreview import link_preview
import pandas as pd

Мы определяем функцию запроса с помощью urllib для нашего среднего блога. Поэтому вам нужно найти URL-адрес целевой страницы среднего размера. Для меня это antonioblago.medium.com.

url = <your medium blog>
req = urllib.request.Request(url, headers = {'User-agent': 'your bot 0.1'})
response = urllib.request.urlopen(req)
html = response.read()
# Parsing response
soup = BeautifulSoup(html, 'html.parser')
# Find all a classes 
text = soup.find_all("a")

Затем мы создаем цикл for для всех ссылок, которые мы нашли на этой странице, и ищем «href=»/», что является нашим шаблоном для соответствующих URL-адресов. Откуда я это знаю? Что ж, для этого вам нужно перейти на свою страницу и открыть инструменты разработчика вашего браузера (F12). Далее вам нужно навести курсор мыши на заголовок вашей статьи, и он покажет вам ссылку, см. ниже.

list_urls = []
for item in text:
    ## convert it to strings
    item = str(item) 
    pos = item.find('href="/')
 if pos is not None: ## if you find a link
    if pos > 0 and item.find("user_profile")>0:
    print(item)

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

Далее мы просто хотим, чтобы эти ссылки были с href="/ + буквами. Мы можем использовать регулярное выражение для этого. Почему я не использую «ария-лейбл»? Потому что они могут измениться, когда среда обновит свою веб-страницу. Ссылка будет более надежной, я думаю.

result = re.search(r'href="\/+([a-z])\w+', item)
if result:
   print(item)

Exkurs regex (регулярные выражения)

Если я кодирую с помощью регулярных выражений, я использую https://regexr.com/ для проверки своей гипотезы. Это отличный сайт, чтобы попробовать свои модели. Это для javascript, но шаблоны аналогичны и для python. Он выделяет ваш шаблон в режиме реального времени, см. ниже.

Чтобы увидеть, будет ли это работать и в python, вы можете проверить https://pythex.org/. в обоих случаях мы находим закономерность, которую искали.

Давай продолжим

Мы хотим найти начало и конец нашего паттерна. Таким образом, библиотека дает нам функцию для нашего объекта результата, start() и end(). Мы также хотим иметь полный URL-адрес, поэтому нам нужно искать конечный шаблон. Затем мы добавляем URL нашей целевой страницы. Чтобы избежать дублирования в нашем списке, мы сначала проверяем, есть ли URL-адрес уже в списке.

result = re.search(r'href="\/+([a-z])\w+', item)
if result:
    try:
        start = result.start()## Start pattern
        end_item = item[start:]
        end = re.search(r'-"', end_item).end() ## End of pattern
        url_extract_pos = item[start:start+end] ## cut out url
        url = "http://antonioblago.medium.com"+url_extract_pos[6:-1]
        if url not in list_urls:
            list_urls.append(url)
            print(url)

Ваш вывод:

Теперь мы хотим получить данные для предварительного просмотра нашей ссылки. Сохраняем их в список словарей. После этого мы можем сохранить их в фрейм данных и загрузить в базу данных.

list_of_links = []
for i in list_urls:
    preview = link_preview(i)
    dic_preview = {"title": preview.title,
                   "description": preview.description,
                   "image": preview.image,
                   "force_title": preview.force_title,
                   "absolute_image": preview.absolute_image,
                   "url": i}
    list_of_links.append(dic_preview)

Вот и все! Вы можете запускать свой скрипт ежедневно или еженедельно в бэкенде, как это делаю я на pythonanywhere.com*.

  • Посетите мою веб-страницу и свяжитесь со мной через linkedin: antonioblago.com
  • Создайте бесплатную учетную запись в моем инструменте отслеживания акций и криптовалют: www.tenxassets.com
  • Если вам нравится разрабатывать веб-приложения на python, я рекомендую вам pythonanywhere.com*

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord. Заинтересованы в Взлом роста? Ознакомьтесь с разделом Схема.