@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, а результат ...
  • Вопрос задан
  • 111 просмотров
Решения вопроса 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.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы