我正在从事一个项目,其中一个步骤包括获取一个随机单词,稍后我将使用它。当我尝试抓住随机词时,它会给我'<span id="result"></span>
',但是如您所见,里面没有词。
代码:
import urllib2
from bs4 import BeautifulSoup
quote_page = 'http://watchout4snakes.com/wo4snakes/Random/RandomWord'
page = urllib2.urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
name_box = soup.find("span", {"id": "result"})
print name_box
name = name_box.text.strip()
print name
我在想,也许它可能需要等待一个单词出现,但是我不确定该怎么做。
答案 0 :(得分:1)
因此,网站的工作方式是:在跨度框中不带任何单词的站点发送给您,然后通过JavaScript对其进行编辑;这就是为什么您得到一个没有任何内容的跨接盒的原因。
但是,由于您尝试获取单词,所以我绝对建议您使用其他方法来获取单词,而不是将单词从页面上刮掉,您只需向{{1}发送POST请求}没有身体的人,就会收到回应。
您使用的是Python 2,但在Python 3中(例如,为了让我可以展示此作品),您可以这样做:
# Define the implied lower bound and the maximum upper bound.
$lowerBound = 1
$maxUpperBound = 18
# Prompt the user for the upper bound of the range, with validation,
# until a valid value is entered.
do {
$userInput = Read-Host -Prompt "How many servers are being tested?"
if (
($upperBound = $userInput -as [int]) -and
($upperBound -ge $lowerBound -and $upperBound -le $maxUpperBound)
) {
break # valid value entered, exit loop.
} else {
# Invalid input: Warn, and prompt again.
Write-Warning "'$userInput' is either not a number or is outside the expected range of [$lowerBound,$maxUpperBound]."
}
} while ($true)
# Create the array of indices based on user input.
1..$upperBound
您也可以在Python 2中使用urllib进行类似的操作。
答案 1 :(得分:1)
使用JavaScript将单词添加到页面。我们可以通过查看请求中返回的实际HTML并将其与我们在Web浏览器DOM检查器中看到的内容进行比较来验证这一点。有两种选择:
对于1,我们可以使用类似requests_html
的名称。看起来像:
from requests_html import HTMLSession
url = 'http://watchout4snakes.com/wo4snakes/Random/RandomWord'
session = HTMLSession()
r = session.get(url)
# Some sleep required since the default of 0.2 isn't long enough.
r.html.render(sleep=0.5)
print(r.html.find('#result', first=True).text)
对于2,如果我们查看该页面正在发出的网络请求,那么可以看到它通过向http://watchout4snakes.com/wo4snakes/Random/RandomWord
发出POST请求来检索随机单词。直接向类似requests
之类的库(在标准库文档here中推荐)发出请求,看起来像:
import requests
url = 'http://watchout4snakes.com/wo4snakes/Random/RandomWord'
print(requests.post(url).text)