@Alena_Y

Почему bs4 неверно парсит страницу?

Доброго времени суток, пытаюсь спарсить аватарку вконтакте, в качестве примера взяла Павла Дурова, часть кода следующая:

import bs4
import requests

def getting_avatar(id):
request = requests.get("https://vk.com/id" + id)
b = bs4.BeautifulSoup(request.text, "html.parser")
print(b)

getting_avatar(1)

Проблема состоит в том, что страница по адресу Павел Дуров | ВКонтакте содержит около 2500 строк, среди которых как раз-таки нужный тег с требуемым id = profile_photo_link, а результат ...
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@Alena_Y Автор вопроса
Вопрос решила, можно сделать вот так:

import urllib
from selenium import webdriver
import random
import urllib.request

url = input()
driver = webdriver.Chrome()
driver.get(url)
with open('filename.png', 'wb') as file:
file.write(driver.find_element_by_xpath('//*[@id="profile_photo_link"]/img').screenshot_as_png)
driver.close()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
hottabxp
@hottabxp Куратор тега Python
Эксперт по BeautifulSoup(но это не точно!)
import requests
from bs4 import BeautifulSoup
import json

response = requests.get('https://vk.com/id1')

soup = BeautifulSoup(response.text,'html.parser')
avatar = soup.find('div',id='page_avatar').a.get('onclick')
json_raw = avatar[avatar.find('{'):avatar.rfind('}')+1] #Здесь вытаскивает json
json_data = json.loads(json_raw)
print(json_data['temp']['x']) # Получаем из json url аватарки


requests не умеет javascript.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
OnederX Москва
от 100 000 до 120 000 ₽
NatsON Москва
от 220 000 до 350 000 ₽
SwapZilla.co Москва
от 200 000 ₽
15 авг. 2020, в 22:12
2000 руб./за проект
15 авг. 2020, в 21:52
2000 руб./за проект
15 авг. 2020, в 21:37
10000 руб./за проект