如何使用Python请求和BeautifulSoup刮取基于JavaScript的动态网站?
我在搜集大学信息 在每个学院下方的网页上,只给出了一个课程名称,其余课程用JavaScript编写。 例如,增加13门课程+ 因此,当我使用如何使用Python请求和BeautifulSoup刮取基于JavaScript的动态网站?,python,selenium,web-scraping,beautifulsoup,python-requests,Python,Selenium,Web Scraping,Beautifulsoup,Python Requests,我在搜集大学信息 在每个学院下方的网页上,只给出了一个课程名称,其余课程用JavaScript编写。 例如,增加13门课程+ 因此,当我使用请求时,无法获取他们的信息。获取(url) 我如何使用请求和BeautifulSoup获取这些细节? 我使用Anaconda Jupyter笔记本作为IDE 我听说过硒,但不知道。 由于Selenium有点重,因此是否有任何可能的lite替代方案可以一次加载所有JavaScript内容 我也听说过Splash框架。如果有人知道它以及如何将它与Python请求
请求时,无法获取他们的信息。获取(url)
我如何使用请求和BeautifulSoup获取这些细节?
我使用Anaconda Jupyter笔记本作为IDE
我听说过硒,但不知道。
由于Selenium有点重,因此是否有任何可能的lite替代方案可以一次加载所有JavaScript内容
我也听说过Splash框架。如果有人知道它以及如何将它与Python请求和BeautifulSoup集成,请回答
我尝试过的事情
1.PyQt
参考:
根据anaconda中的PyQt版本,我导入了不同于视频中的库
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebKitWidgets import QWebPage
import requests
from bs4 import BeautifulSoup
class Client(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self.on_page_load)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def on_page_load(self):
self.app.quit()
url="https://www.shiksha.com/b-tech/colleges/b-tech-colleges-mumbai-all"
client_response=Client(url)
src=client_response.mainFrame().toHtml()
soup = BeautifulSoup(src,"lxml")
tpm = soup.find_all("section",{"class":"tpl-curse-dtls more_46905_0"})
print(tpm)
输出:[]
2。请求模块中的json()
import requests
from bs4 import BeautifulSoup
url="https://www.shiksha.com/b-tech/colleges/b-tech-colleges-mumbai-all"
r=requests.get(url)
a=r.json()
输出:
JSONDecodeError:应为值:第3行第1列(字符3)
3。json.loads()来自json模块
import requests
from bs4 import BeautifulSoup
url="https://www.shiksha.com/b-tech/colleges/b-tech-colleges-mumbai-all"
r=requests.get(url)
a=r.json()
输出:
JSONDecodeError:应为值:第3行第1列(字符3)
DrySrape不适用于Windows您不需要知道它的Javascript的功能。只需单击链接并使用浏览器检查器观察网络请求 在您的特定情况下,Javascript向“/nationalCategoryList/nationalCategoryList/loadMoreCourses/”发送POST请求。因此,您可以发送相同的请求,然后返回一个新的HTML字符串。您可以使用BeautifulSoup解析该字符串并获取所需的数据 上面还有一个额外的步骤,因为POST请求需要指定参数的有效负载。您应该能够在原始页面中找到这些参数。找到它们后,可以查看它们周围的HTML元素,然后使用BeautifulSoup提取它们,或者使用正则表达式查找它们
我希望它能有所帮助。您不需要知道它的Javascript是做什么的。只需单击链接并使用浏览器检查器观察网络请求 在您的特定情况下,Javascript向“/nationalCategoryList/nationalCategoryList/loadMoreCourses/”发送POST请求。因此,您可以发送相同的请求,然后返回一个新的HTML字符串。您可以使用BeautifulSoup解析该字符串并获取所需的数据 上面还有一个额外的步骤,因为POST请求需要指定参数的有效负载。您应该能够在原始页面中找到这些参数。找到它们后,可以查看它们周围的HTML元素,然后使用BeautifulSoup提取它们,或者使用正则表达式查找它们
我希望有帮助。可能重复使用您的代码试用更新问题。@DebanjanB已使用我的代码试用更新问题。可能重复使用您的代码试用更新问题。@DebanjanB已使用我的代码试用更新问题。