BeautifulSoup抓取返回的是{{变量}},而不是页面上显示的文本

时间:2019-04-15 17:34:08

标签: python-3.x beautifulsoup screen-scraping

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

pricelink都在{{}}中返回变量,而不是网页上显示的文本。

我在许多其他网站(具有相关的类名等)上使用了几乎相同的代码,并且在该网站上工作正常,因此出现了我正在查看的网站上的特定内容。

谢谢

1 个答案:

答案 0 :(得分:0)

使用Java脚本填充数据。您可以通过使用搜索字词向其API发送POST请求来获取数据。这将返回一个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来获取数据。