Python:Beautiful Soup 的 "find_all" 没有从 HTML 中提取任何内容
Python: Beautiful Soup's "find_all" does not extract any content from HTML
我目前正在尝试对 googles playstore 进行网络抓取。更具体地说,我想创建一个数据集,其中包含 disney+ 应用程序的评级。
基于网络抓取教程(在“Newegg.com”上构建图形卡数据集),我可以毫不费力地从网站上提取必要的信息。我通过在站点的 html 代码中找到正确的容器来做到这一点。这是运行良好的代码:
import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = "https://www.newegg.com/p/pl?d=graphics+card&PageSize=96&page=1"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html,"html.parser")
page_soup.find_all("div",{"class":"item-container"})[1]
这给了我所需的 html 块输出以提取更具体的信息:
<div class="item-container"><a class="item-img" href="https://www.newegg.com/msi...
但是,如果我尝试在 googles playstore 上复制 disney+ 的代码,该函数不会提取任何内容。当然我也搜索了html代码中包含一个人的评论的容器。代码:
my_url = "https://play.google.com/store/apps/details?id=com.disney.disneyplus&hl=de&showAllReviews=true"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html,"html.parser")
page_soup.find_all("div",{"class":"zc7KVe"})[1]
产生错误:
IndexError Traceback (most recent call last)
<ipython-input-54-930354cdd883> in <module>
9 uClient.close()
10 page_soup = soup(page_html,"html.parser")
---> 11 page_soup.find_all("div",{"class":"zc7KVe"})[1]
12
IndexError: list index out of range
我明白了错误信息,但是我很困惑如何像图形卡示例一样提取评论信息。
非常感谢任何帮助。
尼尔问好
这些 class="zc7KVe"
的 div 是用 JavaScript 动态加载的。如果您查看服务器生成的 HTML 代码(在 Chrome 中:右键单击 > 查看页面源代码),您将找不到这些 div。 BeautifulSoup 没有 运行 任何 JavaScript,它不是浏览器,因此无法解析动态加载的评论。
相反,您可以使用 pip 中的 google-play-scraper 模块来获取应用评论。
一个简单的选项是 HtmlSession
from requests_html import HTMLSession
from bs4 import BeautifulSoup as bs # importing BeautifulSoup
url = "https://play.google.com/store/apps/details?id=com.disney.disneyplus&hl=de&showAllReviews=true"
# init an HTML Session
session = HTMLSession()
# get the html content
response = session.get(url)
# execute Java-script
response.html.render(sleep=5)
# create bs object to parse HTML
soup = bs(response.html.html, "html.parser")
names = soup.find_all("div",{"class":"zc7KVe"})
for i in range(5):
print(names[i].text)
输出:-
Zapomni28. November 20201Nicht hilfreichSpamLink zu dieser Rezension Das Layout der App ist nicht sehr schön oder innovativ. Es gibt wenig Einstellungen. Am kritischsten ist aber dass es kein Miniplayer gibt. Wirklich schlecht. Prime hat das z.b.. Das Angebot von NatGeo ist ziemlich klein. Hätte mich auf mehr gute Dokus gefreut. Aber wirklich cool ist, dass man den k…Vollständige RezensionDas Layout der App ist nicht sehr schön oder innovativ. Es gibt wenig Einstellungen. Am kritischsten ist aber dass es kein Miniplayer gibt. Wirklich schlecht. Prime hat das z.b.. Das Angebot von NatGeo ist ziemlich klein. Hätte mich auf mehr gute Dokus gefreut. Aber wirklich cool ist, dass man den kompletten Speicherplatz der SD/Speicher Karte nutzen kann und es hier kein Limit gibt. Man sieht auch wieviel noch verfügbar ist. Insgesamt wie immer bei den dicken Konzernen viel Luft nach oben.
Zapomni28. November 20201Nicht hilfreichSpamLink zu dieser Rezension
Aleolina X27. November 20206Bearbeitungsverlauf ansehenNicht hilfreichSpamLink zu dieser Rezension Die App ist super aber irgendwie kann ich in der app seit kurzem die Lautstärke nicht mehr regulieren. Ich muss die App jedes mal vorher schließen dann die Lautstärke einstellen und dann wieder öffnen. Außerdem lassen sich bei mir die Untertitel auch nicht langfristig ausschalten. Bei jedem neuen Fi…Vollständige RezensionDie App ist super aber irgendwie kann ich in der app seit kurzem die Lautstärke nicht mehr regulieren. Ich muss die App jedes mal vorher schließen dann die Lautstärke einstellen und dann wieder öffnen. Außerdem lassen sich bei mir die Untertitel auch nicht langfristig ausschalten. Bei jedem neuen Film oder einer neuen Folge sind die Untertitel wieder da. Das macht das ganze irgendwie nervig. Hoffe das wird bald behoben.
Aleolina X27. November 20206Bearbeitungsverlauf ansehenNicht hilfreichSpamLink zu dieser Rezension
Stefan18. November 202021Nicht hilfreichSpamLink zu dieser Rezension Ein tolles Angebot zum vernünftigen Preis, große Auswahl, top Qualität. Einziger Kritikpunkt ist, dass die Downloads sich ständig von selbst löschen und man sie erneut runter laden muss wenn man die App verlassen hat und später wieder rein geht. Ich habe mir eine komplette Serie zu Hause über WLAN i…Vollständige RezensionEin tolles Angebot zum vernünftigen Preis, große Auswahl, top Qualität. Einziger Kritikpunkt ist, dass die Downloads sich ständig von selbst löschen und man sie erneut runter laden muss wenn man die App verlassen hat und später wieder rein geht. Ich habe mir eine komplette Serie zu Hause über WLAN in höchster Qualität runter geladen, die Folgen werden in Downloads angezeigt aber ich kann sie nicht abspielen sondern muss immer wieder neu runter laden. (SONY XPERIA 1)
我目前正在尝试对 googles playstore 进行网络抓取。更具体地说,我想创建一个数据集,其中包含 disney+ 应用程序的评级。
基于网络抓取教程(在“Newegg.com”上构建图形卡数据集),我可以毫不费力地从网站上提取必要的信息。我通过在站点的 html 代码中找到正确的容器来做到这一点。这是运行良好的代码:
import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = "https://www.newegg.com/p/pl?d=graphics+card&PageSize=96&page=1"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html,"html.parser")
page_soup.find_all("div",{"class":"item-container"})[1]
这给了我所需的 html 块输出以提取更具体的信息:
<div class="item-container"><a class="item-img" href="https://www.newegg.com/msi...
但是,如果我尝试在 googles playstore 上复制 disney+ 的代码,该函数不会提取任何内容。当然我也搜索了html代码中包含一个人的评论的容器。代码:
my_url = "https://play.google.com/store/apps/details?id=com.disney.disneyplus&hl=de&showAllReviews=true"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html,"html.parser")
page_soup.find_all("div",{"class":"zc7KVe"})[1]
产生错误:
IndexError Traceback (most recent call last)
<ipython-input-54-930354cdd883> in <module>
9 uClient.close()
10 page_soup = soup(page_html,"html.parser")
---> 11 page_soup.find_all("div",{"class":"zc7KVe"})[1]
12
IndexError: list index out of range
我明白了错误信息,但是我很困惑如何像图形卡示例一样提取评论信息。
非常感谢任何帮助。
尼尔问好
这些 class="zc7KVe"
的 div 是用 JavaScript 动态加载的。如果您查看服务器生成的 HTML 代码(在 Chrome 中:右键单击 > 查看页面源代码),您将找不到这些 div。 BeautifulSoup 没有 运行 任何 JavaScript,它不是浏览器,因此无法解析动态加载的评论。
相反,您可以使用 pip 中的 google-play-scraper 模块来获取应用评论。
一个简单的选项是 HtmlSession
from requests_html import HTMLSession
from bs4 import BeautifulSoup as bs # importing BeautifulSoup
url = "https://play.google.com/store/apps/details?id=com.disney.disneyplus&hl=de&showAllReviews=true"
# init an HTML Session
session = HTMLSession()
# get the html content
response = session.get(url)
# execute Java-script
response.html.render(sleep=5)
# create bs object to parse HTML
soup = bs(response.html.html, "html.parser")
names = soup.find_all("div",{"class":"zc7KVe"})
for i in range(5):
print(names[i].text)
输出:-
Zapomni28. November 20201Nicht hilfreichSpamLink zu dieser Rezension Das Layout der App ist nicht sehr schön oder innovativ. Es gibt wenig Einstellungen. Am kritischsten ist aber dass es kein Miniplayer gibt. Wirklich schlecht. Prime hat das z.b.. Das Angebot von NatGeo ist ziemlich klein. Hätte mich auf mehr gute Dokus gefreut. Aber wirklich cool ist, dass man den k…Vollständige RezensionDas Layout der App ist nicht sehr schön oder innovativ. Es gibt wenig Einstellungen. Am kritischsten ist aber dass es kein Miniplayer gibt. Wirklich schlecht. Prime hat das z.b.. Das Angebot von NatGeo ist ziemlich klein. Hätte mich auf mehr gute Dokus gefreut. Aber wirklich cool ist, dass man den kompletten Speicherplatz der SD/Speicher Karte nutzen kann und es hier kein Limit gibt. Man sieht auch wieviel noch verfügbar ist. Insgesamt wie immer bei den dicken Konzernen viel Luft nach oben.
Zapomni28. November 20201Nicht hilfreichSpamLink zu dieser Rezension
Aleolina X27. November 20206Bearbeitungsverlauf ansehenNicht hilfreichSpamLink zu dieser Rezension Die App ist super aber irgendwie kann ich in der app seit kurzem die Lautstärke nicht mehr regulieren. Ich muss die App jedes mal vorher schließen dann die Lautstärke einstellen und dann wieder öffnen. Außerdem lassen sich bei mir die Untertitel auch nicht langfristig ausschalten. Bei jedem neuen Fi…Vollständige RezensionDie App ist super aber irgendwie kann ich in der app seit kurzem die Lautstärke nicht mehr regulieren. Ich muss die App jedes mal vorher schließen dann die Lautstärke einstellen und dann wieder öffnen. Außerdem lassen sich bei mir die Untertitel auch nicht langfristig ausschalten. Bei jedem neuen Film oder einer neuen Folge sind die Untertitel wieder da. Das macht das ganze irgendwie nervig. Hoffe das wird bald behoben.
Aleolina X27. November 20206Bearbeitungsverlauf ansehenNicht hilfreichSpamLink zu dieser Rezension
Stefan18. November 202021Nicht hilfreichSpamLink zu dieser Rezension Ein tolles Angebot zum vernünftigen Preis, große Auswahl, top Qualität. Einziger Kritikpunkt ist, dass die Downloads sich ständig von selbst löschen und man sie erneut runter laden muss wenn man die App verlassen hat und später wieder rein geht. Ich habe mir eine komplette Serie zu Hause über WLAN i…Vollständige RezensionEin tolles Angebot zum vernünftigen Preis, große Auswahl, top Qualität. Einziger Kritikpunkt ist, dass die Downloads sich ständig von selbst löschen und man sie erneut runter laden muss wenn man die App verlassen hat und später wieder rein geht. Ich habe mir eine komplette Serie zu Hause über WLAN in höchster Qualität runter geladen, die Folgen werden in Downloads angezeigt aber ich kann sie nicht abspielen sondern muss immer wieder neu runter laden. (SONY XPERIA 1)