Python Красивый Суп Возвращает Нетип - PullRequest
2 голосов
/ 26 апреля 2020

Я пытаюсь разработать программу, которая может захватить руны для конкретного чемпиона c в Лиге Легенд. А вот и мой код:

import requests
import re
from bs4 import BeautifulSoup





url = 'https://www.leagueofgraphs.com/zh/champions/builds/darius'

response = requests.get(url).text
soup = BeautifulSoup(response,'lxml')
tables = soup.find('div',class_ = 'img-align-block') 
print(tables)


А вот и оригинальный HTML Файл:

<img src="//cdn2.leagueofgraphs.com/img/perks/10.8/64/8010.png" alt="征服者" tooltip="<itemname><img src=&quot;//cdn2.leagueofgraphs.com/img/perks/10.8/64/8010.png&quot; width=&quot;24&quot; height=&quot;24&quot; alt=&quot;征服者&quot; /> 征服者</itemname><br/><br/>基礎攻擊或技能在命中敵方英雄時獲得 2 層征服者效果,持續 6 秒,每層效果提供 2-5 適性之力。 最多可以疊加 10 次。遠程英雄每次普攻只會提供 1 層效果。<br><br>在疊滿層數後,你對英雄造成的 15% 傷害會轉化為對自身的回復效果(遠程英雄則為 8%)。" height="36" width="36" class="requireTooltip">

Я не могу ни случайно получить доступ к этой части и разобрать ее, ни найти IMG ср c. Тем не менее, я могу просмотреть это на их сайте. Как я мог решить эту проблему?

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

Интересующая вас часть не входит в HTML. Вы можете проверить дважды, выполнив поиск:

soup.prettify()

Возможно, части сайта загружены JavaScript, поэтому вы можете использовать код, который открывает браузер и посещает эту страницу. Например, вы можете использовать селен

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(url)
time.sleep(6)  # give the website some time to load
page = driver.page_source

soup = BeautifulSoup(page,'lxml')
tables = soup.find('div', class_='img-align-block') 
print(tables)


0 голосов
/ 26 апреля 2020

Попробуйте установить User-Agent для headers вашего запроса, без него веб-сайт отправляет другой контент, например:

import requests
from bs4 import BeautifulSoup

url = 'https://www.leagueofgraphs.com/zh/champions/builds/darius'
h = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0"}
response = requests.get(url, headers=h).text
soup = BeautifulSoup(response,'html.parser')
images = soup.find_all('img', {"class" : 'mainPicture'})
for img in images:
    print(img['src'])

//cdn2.leagueofgraphs.com/img/perks/10.8/64/8010.png
//cdn2.leagueofgraphs.com/img/perks/10.8/64/8010.png
//cdn2.leagueofgraphs.com/img/perks/10.8/64/8230.png
//cdn2.leagueofgraphs.com/img/perks/10.8/64/8230.png
//cdn2.leagueofgraphs.com/img/perks/10.8/64/8230.png

Примечания:

  • Демонстрация
  • Если мой ответ помог вам, пожалуйста, примите его как правильный ответ, спасибо!
0 голосов
/ 26 апреля 2020

На сайте используется обработка JavaScript, поэтому вам необходимо использовать Selenium или другой инструмент для очистки, поддерживающий JS загрузку.

...