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. Заинтересованы в Взлом роста? Ознакомьтесь с разделом Схема.