#python #selenium #selenium-webdriver #selenium-chromedriver #screen-scraping
#python #selenium #selenium-webdriver #selenium-chromedriver #очистка экрана
Вопрос:
Я создаю инструмент с использованием Python, который загружает все фотографии и видео, размещенные пользователем в Instagram. Все, что я хотел сделать сейчас, это извлечь ссылку на все сообщения, чтобы я мог запускать их в цикле и загружать все сообщения.
Это href, который я хочу извлечь. Я перепробовал все решения по переполнению стека, но ничего не получилось. Вот почему я задаю этот вопрос. Вот мой код для ссылки на ur:
import urllib.request as reqq
from selenium import webdriver
url = input("Enter the link:")
browser = webdriver.Chrome("D:\Python_Files\Programs\chromedriver.exe")
browser.get(url)
#URLs of all posts are extracted. This is whr I need help
for x in range(len(extracted_urls)):
img_url = ""
vid_url = ""
try:
vid_url = browser.find_element_by_class_name('_5wCQW').find_element_by_tag_name('video').get_attribute('src')
reqq.urlretrieve(vid_url,f"D:\instavid{x}.mp4")
except:
img_url = browser.find_element_by_class_name('KL4Bh').find_element_by_tag_name('img').get_attribute('src')
reqq.urlretrieve(img_url,f"D:\instaimg{x}.jpg")
browser.close()
Комментарии:
1. Можете ли вы поделиться URL-адресом?
2. @AndrejKesely URL-адрес?
3. URL страницы, которую вы хотите удалить.
4. Вот и все: instagram.com/cristiano
Ответ №1:
Вы используете имя класса для идентификации элементов, но оно генерируется программно и не будет работать. Чтобы очистить его, вы можете использовать css-селектор, подобный приведенному ниже
list = driver.find_elements_by_css_selector('article > div a')
for element in list:
print(element.get_attribute('href')) #this will give you all the urls
Комментарии:
1. Спасибо, чувак! Это действительно помогло! Не могли бы вы объяснить, как
list = driver.find_elements_by_css_selector('article > div a')
это работает? И я могу получить только 12 самых последних сообщений пользователя. Есть ли какой-нибудь способ получить все сообщения?2. это селектор css, который сначала получает элемент article, «>» означает прямого дочернего элемента «article» и «div a» — это содержащий элемент div (сообщает браузеру так: «дайте мне div, в котором есть элемент «a»). Чтобы получить больше элементов — вам нужно прокрутить страницу. Первые 12 — это те, которые загружены
3. вот как вы можете автоматически прокручивать — dev.to/mr_h/python-selenium-infinite-scrolling-3o12
4. Хорошо, Алин. Если вы считаете, что мой вопрос хорош и был хорошо сформулирован, тогда, пожалуйста, рассмотрите мой вопрос. Спасибо!
Ответ №2:
Попробуйте использовать Beautifulsoup. Вы можете легко анализировать html и xml.
from bs4 import BeautifulSoup
data = '<div><div><a href="/p/CFShhjj"></a></div></div>'
soup = BeautifulSoup(data, 'html.parser')
for tag in soup.find_all():
if tag.name=='a':
print(tag['href'])
OUT : /p/CFShhjj
Комментарии:
1. Спасибо! Можете ли вы, пожалуйста, объяснить, как вы получили значение для
data
?2. Я взял фиктивные данные.. вы можете передавать свои HTML-данные
Ответ №3:
Данные, которые вы видите на странице, генерируются программно и хранятся внутри JSON на странице. Используйте этот пример для извлечения мультимедийных данных:
import re
import json
import requests
url = 'https://www.instagram.com/cristiano/'
html_doc = requests.get(url).text
data = json.loads(re.search(r'window._sharedData = ({.*?});', html_doc).group(1))
def find_media(data):
if isinstance(data, dict):
for k, v in data.items():
if k == '__typename' and v in ('GraphImage', 'GraphVideo'):
yield data
else:
yield from find_media(v)
elif isinstance(data, list):
for v in data:
yield from find_media(v)
for media in find_media(data):
print('http://instagram.com/p/{}/'.format(media['shortcode']))
if media['__typename'] == 'GraphImage':
print(media['display_url'])
else:
print(media['video_url'])
С принтами:
...
http://instagram.com/p/CE2D7zcAFrq/
https://instagram.fbts6-1.fna.fbcdn.net/v/t51.2885-15/e35/s1080x1080/118883515_338753734147784_3257042213665207515_n.jpg?_nc_ht=instagram.fbts6-1.fna.fbcdn.netamp;_nc_cat=108amp;_nc_ohc=Duxo0dZ3q8oAX8ps1u6amp;_nc_tp=15amp;oh=e52995d9569e7dde5c348a5eb1c4a886amp;oe=5F8F1B14
http://instagram.com/p/CE2D7zbAMrJ/
https://instagram.fbts6-1.fna.fbcdn.net/v/t51.2885-15/e35/s1080x1080/119056544_318190815934349_3868576271600213484_n.jpg?_nc_ht=instagram.fbts6-1.fna.fbcdn.netamp;_nc_cat=105amp;_nc_ohc=Sfy0ykNdpxsAX9kOZqyamp;_nc_tp=15amp;oh=b48009b98e0a4b6483f79902d3253d12amp;oe=5F8F11FB
http://instagram.com/p/CEy7I6yAm9i/
https://instagram.fbts6-1.fna.fbcdn.net/v/t51.2885-15/e35/s1080x1080/118877779_2707314466207997_7737960511758007253_n.jpg?_nc_ht=instagram.fbts6-1.fna.fbcdn.netamp;_nc_cat=1amp;_nc_ohc=prF2yBSpK34AX8TSiuXamp;_nc_tp=15amp;oh=bdfc5b9d1914bdd3470209a64a5e155bamp;oe=5F8DEBFF
http://instagram.com/p/CEy7I6yg2Op/
https://instagram.fbts6-1.fna.fbcdn.net/v/t51.2885-15/e35/s1080x1080/118784068_748127092633181_2341530667249985288_n.jpg?_nc_ht=instagram.fbts6-1.fna.fbcdn.netamp;_nc_cat=105amp;_nc_ohc=_ynvOYOBxY4AX_B22yFamp;_nc_tp=15amp;oh=e5e9d716421cd3ea0edb71adeebe8ebeamp;oe=5F8F3798
http://instagram.com/p/CEy7I6zA6nU/
https://instagram.fbts6-1.fna.fbcdn.net/v/t51.2885-15/e35/s1080x1080/118555638_778542006213962_8711737455993781057_n.jpg?_nc_ht=instagram.fbts6-1.fna.fbcdn.netamp;_nc_cat=102amp;_nc_ohc=MVPAjHvN3QkAX9uawMnamp;_nc_tp=15amp;oh=cefd5a6162af11327ab9d1d4bf94df7aamp;oe=5F8FCF5B
http://instagram.com/p/CEy7I63Aq9f/
https://instagram.fbts6-1.fna.fbcdn.net/v/t51.2885-15/e35/s1080x1080/118782135_760435874772485_2807641115290436245_n.jpg?_nc_ht=instagram.fbts6-1.fna.fbcdn.netamp;_nc_cat=105amp;_nc_ohc=SUZnVsn1EU4AX8MUj30amp;_nc_tp=15amp;oh=7937a7c235a54b271a869596c837fae6amp;oe=5F907287
http://instagram.com/p/CEy7I64AvaZ/
https://instagram.fbts6-1.fna.fbcdn.net/v/t51.2885-15/e35/s1080x1080/118651624_163760538669975_655651222517528584_n.jpg?_nc_ht=instagram.fbts6-1.fna.fbcdn.netamp;_nc_cat=103amp;_nc_ohc=8mj5Ysn75pMAX9dpSDAamp;_nc_tp=15amp;oh=6c33025592ee8f4569ad5d016e69785bamp;oe=5F8FF67B
Комментарии:
1. Привет! Спасибо, чувак! Но поскольку он слишком длинный, я придерживаюсь ответа Алина Стелиана. Но я действительно ценю ваши усилия. Спасибо!
2. Если вы считаете, что мой вопрос хорош и был хорошо сформулирован, тогда, пожалуйста, рассмотрите мой вопрос. Спасибо!