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请求? (或任何其他方式告诉刮刀等待页面加载?)
答案 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是一个很好的起点。