Javascript BeautifulSoup刮片:加载div而不是内容

Javascript BeautifulSoup刮片:加载div而不是内容,javascript,python,html,web-scraping,beautifulsoup,Javascript,Python,Html,Web Scraping,Beautifulsoup,这里没有。 我正在尝试从该网站上获取搜索结果: 我正在使用python的BeautifulSoup import csv import requests from BeautifulSoup import BeautifulSoup for numb in ('0', '69'): url = ('http://www.mastersportal.eu/search/?q=ci-30,11,10,3,4,8,9,14,15,16,17,34,1,19|di-4|lv-maste

这里没有。 我正在尝试从该网站上获取搜索结果:

我正在使用python的BeautifulSoup

import csv
import requests
from BeautifulSoup import BeautifulSoup

for numb in ('0', '69'):
        url = ('http://www.mastersportal.eu/search/?q=ci-30,11,10,3,4,8,9,14,15,16,17,34,1,19|di-4|lv-master|rv-1&start=' + numb + '0&order=tuition_eea&direction=asc')
        response = requests.get(url)
        html = response.content

        soup = BeautifulSoup(html)
        table = soup.find('div', attrs={'id': 'StudySearchResults'})

        lista = []
        for i in table.findAll('h3'):
            lista.append(h3.string)
print(table.prettify())
我想获得干净的数据,包括关于主机的基本信息,现在只需要名称。 我在这里使用的URL是用于对网站进行过滤研究的,页面的循环应该可以

然而,结果是:

<div id="StudySearchResults">
  <div style="display:none" id="TrackingSearchValue" class="TrackingSearchValue" data-search=""></div>
  <div style="display:none" id="SearchViewEvent" class="TrackingEvent TrackingNoLocation" data-type="srch" data-action="view" data-id=""></div>
  <div id="StudySearchResultsStudies" class="TrackingLinkedList" data-start="" data-list-type="study" data-type="rslts">
    <!-- Wait pane, just here to make sure there is no white page -->
    <div id="WaitPane" class="WaitPane">
      <img src="http://www.mastersportal.eu/Modules/Results/Resources/Throbber.gif" />
      <span>Loading search results...</span>
    </div>
  </div>
</div>

为什么不显示内容,而只显示加载div?环顾四周,我觉得这与网站使用JavaScript处理数据的方式有关,Python是否存在类似AJAX的请求?或者以其他方式告诉刮板等待页面加载?

您基本上已经回答了自己的问题。BeautifulSoup是一个纯web刮板,它只下载服务器返回的特定URL的任何内容

如果您希望呈现浏览器中显示的页面,则需要使用类似的工具来启动实际的浏览器并对其进行远程控制

虽然使用Webdriver非常强大,但它的学习曲线也比纯web抓取要陡峭得多


如果您想开始在Python中使用Webdriver,可以从中开始。

如果您只需要文本,应该这样做

lista.append(h3.get_text())
关于第二个问题,jsfan的答案是正确的。您应该尝试使用Selenium并使用它的功能等待您的搜索结果,这些结果显示在带有类名称Result master premium的div中


尝试h3.get_text而不是h3.string。页面正在发出ajax请求以获取json格式的数据,您需要直接查询api端点检查Chrome DevTools中的网络选项卡您试图从页面获取什么,master是什么?@WalidSaad谢谢,但我不知道如何开始,关于如何使用Chrome devtools进行刮取,您对我能读到的内容有什么建议吗?谢谢您提供的资源。你说得对,在我这个水平上,这可能有点难,但非常需要!一定要去做。我不是想阻止你,而是想确保你知道你的目的。好的,我首先需要了解硒的用途,然后我会使用这种方法。谢谢
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "div[@class*='Result master premium']))
)