BeautifulSoup 抓取返回的是 {{ variable }} 而不是页面上显示的文本
BeautifulSoup scraping is returning {{ variable }} rather than the text shown on the page
我正在尝试使用 BeautifulSoup 从网站上抓取一些数据,而我正在取回的文本似乎是 Django 标签,例如{{ ResultLink }} 而不是我在查看页面源代码时看到的实际 URL。
我该如何取回页面上显示的文本? BeautifulSoup内可以吗?
我的代码是这样的:
req = session.get(url, headers=headers)
bsObj = BeautifulSoup(req.text, 'html.parser')
if bsObj.find("div", {"id" : {"exactresult"}}) is not None:
price = bsObj.find_all("div", {"class" : {"price-details"}})[0].get_text()
link = bsObj.find_all("a", {"class" : {"btn-plate"}})[0].get_text()
price
和 link
都返回 {{ }} 中的变量,而不是网页上显示的文本。
我在许多其他网站上使用了几乎相同的代码(具有相关的 class 名称等)并且在那里工作正常,所以我正在查看的网站看起来有些特定。
谢谢
使用 Javascript 填充数据。您可以通过使用搜索词向他们的 API 发出 POST 请求来获取数据。这将 return 一个 json
响应,其中包含包括顶部数据在内的所有数据。
import requests
from bs4 import BeautifulSoup
#change 'ash1' to your search term
payload={"search":"ash1"}
req = requests.post('https://www.regplates.com/api/search',json=payload)
price=req.json()['data']['exact']['price']
link=req.json()['data']['exact']['link']
print(price,link,sep="\n")
输出
688800
/number-plate/ASH-1
json 响应可能非常大,具体取决于搜索词。理解它的一种简单方法是使用 pprint
import pprint
...
pprint.pprint(req.json())
或者您也可以使用 selenium 来获取数据。
我正在尝试使用 BeautifulSoup 从网站上抓取一些数据,而我正在取回的文本似乎是 Django 标签,例如{{ ResultLink }} 而不是我在查看页面源代码时看到的实际 URL。
我该如何取回页面上显示的文本? BeautifulSoup内可以吗?
我的代码是这样的:
req = session.get(url, headers=headers)
bsObj = BeautifulSoup(req.text, 'html.parser')
if bsObj.find("div", {"id" : {"exactresult"}}) is not None:
price = bsObj.find_all("div", {"class" : {"price-details"}})[0].get_text()
link = bsObj.find_all("a", {"class" : {"btn-plate"}})[0].get_text()
price
和 link
都返回 {{ }} 中的变量,而不是网页上显示的文本。
我在许多其他网站上使用了几乎相同的代码(具有相关的 class 名称等)并且在那里工作正常,所以我正在查看的网站看起来有些特定。
谢谢
使用 Javascript 填充数据。您可以通过使用搜索词向他们的 API 发出 POST 请求来获取数据。这将 return 一个 json
响应,其中包含包括顶部数据在内的所有数据。
import requests
from bs4 import BeautifulSoup
#change 'ash1' to your search term
payload={"search":"ash1"}
req = requests.post('https://www.regplates.com/api/search',json=payload)
price=req.json()['data']['exact']['price']
link=req.json()['data']['exact']['link']
print(price,link,sep="\n")
输出
688800
/number-plate/ASH-1
json 响应可能非常大,具体取决于搜索词。理解它的一种简单方法是使用 pprint
import pprint
...
pprint.pprint(req.json())
或者您也可以使用 selenium 来获取数据。