首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Beautiful Soup返回Nonetype

Python Beautiful Soup返回Nonetype
EN

Stack Overflow用户
提问于 2020-04-26 19:22:33
回答 3查看 100关注 0票数 2

我正在尝试开发一个程序,可以为特定的英雄联盟冠军抓取符文。下面是我的代码:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
<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 src。不过,我可以在他们的网站上浏览一下。我该如何解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2020-04-26 19:44:12

您感兴趣的部分不在HTML中。你可以通过搜索来重复检查:

代码语言:javascript
复制
soup.prettify()

网站的某些部分可能加载了JavaScript,因此您可以使用打开浏览器并访问该页面的代码。例如,您可以使用selenium

代码语言: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)
票数 1
EN

Stack Overflow用户

发布于 2020-04-26 20:02:33

该网站使用JavaScript处理,因此您需要使用Selenium或其他支持JS加载的抓取工具。

票数 0
EN

Stack Overflow用户

发布于 2020-04-26 21:09:49

尝试在您的请求的headers上设置User-Agent,如果没有它,网站将发送不同的内容,即:

代码语言:javascript
复制
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'])

代码语言:javascript
复制
//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

备注:

  • Demo
  • If我的答案对您很有帮助,请考虑将其作为正确答案接受,谢谢!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61439850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档