используя регулярное выражение или красивый суп, чтобы захватить чей-то сайт с Instagram - PullRequest
0 голосов
/ 05 мая 2018

Я хочу получить чей-то сайт из биографии инстаграм. Instagram скрывает этот веб-сайт в теге text / javascript, поэтому я не могу получить URL, как обычно, с помощью якоря из Beautifulsoup. Вот фрагмент страницы источника, который содержит то, что я пытаюсь захватить:

..., "country_block" ложь "external_url": "https://www.brittanyannecohen.com/pattern-control","blocked_by_viewer":false,...

Я заметил, что ссылка, которую я хочу получить, всегда привязана к атрибуту external_url в словаре (см. Рисунок ниже).

Я попытался получить этот URL с помощью регулярных выражений, но он не работает, см. Код ниже

url=re.findall("[\"external_url\":]['https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+']",soup)

но я получаю ошибку:

диапазон плохих символов [- \ w в позиции 31

1 Ответ

0 голосов
/ 06 мая 2018

У вас есть квадратная скобка, где вы должны иметь круглые скобки:

url=re.findall("[\"external_url\":]['https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+']",soup)
url=re.findall("[\"external_url\":]('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+']",soup)
                                   ^--- change [ to (

Подсказка была в сообщении об ошибке bad character range [-\w, что означало, что класс символов был запущен раньше, чем это выражение. Глядя ранее, мы находим ['https?:..., что тоже не имеет смысла, и это где проблема была.

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

Используйте это регулярное выражение

(?<="external_url":")[^"]+

И весь матч будет вашим целевым URL.

См. демо live regex .

...