BeautifulSoup Scraping:加载div而不是内容

时间:2016-02-21 10:37:21

标签: javascript python html web-scraping beautifulsoup

Noob在这里。 我正试图从这个网站上搜索搜索结果:http://www.mastersportal.eu/search/?q=di-4|lv-master&order=relevance

我正在使用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())

我希望获得有关Master的基本信息的干净数据(现在只是名称)。 我在这里使用的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请求? (或任何其他方式告诉刮刀等待页面加载?)

2 个答案:

答案 0 :(得分:0)

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

lista.append(h3.get_text())

关于你的第二个问题,jsfan的答案是正确的。您应该尝试使用Selenium并使用其wait功能等待您的搜索结果,该搜索结果显示在divs中,类名为Result master premium

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "div[@class*='Result master premium']))
)

答案 1 :(得分:-1)

你已基本回答了自己的问题。 Beautiful Soup是一个纯粹的Web scraper,它只会下载服务器返回的特定URL。

如果要在浏览器中显示页面,则需要使用Selenium Webdriver之类的内容,它将启动实际的浏览器并对其进行远程控制。

虽然使用Webdriver非常强大,但它的学习曲线比纯网页抓取更陡峭。

如果您想在Python中使用Webdriver,official documentation是一个很好的起点。