Невозможно получить все ссылки с веб-страницы с помощью запросов - PullRequest
7 голосов
/ 26 мая 2020

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

Я могу получить все ссылки, если позволю селеновому скрипту прокручиваться вниз, пока не достигнет дна. Одна такая ссылка, которую я sh могу очистить, - это , эта .

Теперь моя цель - проанализировать все эти ссылки с помощью запросов. Я заметил, что ссылки, которые я хочу проанализировать, построены с использованием такого короткого кода B-uPwZsJtnB.

Однако я пытаюсь очистить те разные shortcode, доступные в теге скрипта, найденном в исходном коде этой веб-страницы. На этой странице около 600 shortcodes. Сценарий, который я создал, может анализировать только первые 70 такие shortcode, что в конечном итоге может создать 70 квалифицированных ссылок.

Как я могу получить все 600 ссылок с помощью запросов?

Я пробовал до сих пор с:

import re
import json
import requests

base_link = 'https://www.instagram.com/p/{}/'
lead_url = 'https://www.instagram.com/explore/tags/baltimorepizza/'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
    req = s.get(lead_url)
    script_tag = re.findall(r"window\._sharedData[^{]+(.*?);",req.text)[0]
    for item in json.loads(script_tag)['entry_data']['TagPage']:
        tag_items = item['graphql']['hashtag']['edge_hashtag_to_media']['edges']
        for elem in tag_items:
            profile_link = base_link.format(elem['node']['shortcode'])
            print(profile_link)

Ответы [ 3 ]

2 голосов
/ 02 июня 2020

Если вы хотите сделать это с помощью requests, рассмотрите возможность запроса XHR / Ajax Http-запросов для имитации отложенной загрузки . См. Следующее изображение:

enter image description here

You make queries to the instagram.com server similar to Очистите JS страницу с отложенной загрузкой с помощью Python запросов публикации.

Отказ от ответственности

Вы можете не удалось выполнить эту задачу из-за некоторых значений Dynami c Cook ie или других мер защиты, наложенных Instagram.

0 голосов
/ 06 июня 2020

Я предлагаю вам использовать Instagram Graph API , если вы создаете коммерческий продукт, поскольку для использования данных Instagram publi c требуется согласие из-за GDPR. Этот API упростит вашу работу, но с ограничениями API, такими как вы можете запрашивать 30 поисковых запросов в течение 7 дней на один токен пользователя.

Если вы создаете некоммерческий инструмент, у вас есть два подхода.

  1. Очистите веб-страницу Instagram напрямую. Как упоминалось в ответах выше, вы можете использовать селен и автоматизировать взаимодействие страниц, поскольку веб-страница использует javascript для генерации URL-адресов изображений. Недостатком этого метода является то, что instagram и facebook используют методы антискреба, чтобы предотвратить очистку своих данных, например, обертывание html элементов сгенерированными динамическими c классами, частое изменение xpaths. Возможно, вам придется потратить много времени на код и исправить эти вещи позже.

  2. Использование сторонних библиотек, созданных для очистки данных Instagram. В github есть много сторонних библиотек с открытым исходным кодом, и instaloader - мой любимый. вы можете загрузить все результаты поиска по хэштегам, используя одну команду . Эта библиотека не только загружает изображения, но и данные json поста, относящегося к изображению. Поскольку у библиотеки есть сопровождающие, вам не нужно беспокоиться о последующих изменениях веб-страницы Instagram. Я рекомендую этот метод в вашем случае.

0 голосов
/ 31 мая 2020

Веб-страница Instagram использует отложенную загрузку для загрузки изображений. Вы можете преодолеть это двумя способами:

  1. Используйте Instagram API , как указано в комментариях
  2. Используйте такой инструмент, как selenium , чтобы загрузите все изображения на странице, прокрутив вниз, а затем выберите ссылки

Первый способ - лучший способ сделать это.

...