我正在尝试使用BeautifulSoup和Python 3.5来抓取this之类的页面。具体来说,我对尺寸的数量感兴趣。在该特定页面中,大小的数量是3(S,M,L)。此信息可以在html代码中的表单中找到。
我尝试的代码是:
import requests
from bs4 import BeautifulSoup
page = requests.get('http://www.bendonlingerie.com.au/pleasure-state-d-arcy-delatour-soft-cup-bra-jester-red-p21-2346w')
soup=BeautifulSoup(page.content,'html.parser')
right = soup.find("div", class_="product-shop")
sizes = right.find("div", id="sizes")
sizes = sizes.find("ul", class_="button-size-list combo-list")
sizes = sizes.find_all("li")
nu_of_sizes = len(sizes)
print(nu_of_sizes)
此代码打印'0'。正确的打印应该是'3',因为有3种尺寸(S,M,L)。我不想使用硒或这样的包装。有没有办法使用BeautifulSoup“捕获”这些数据?
答案 0 :(得分:1)
如果您仔细检查页面来源,您会发现您感兴趣的数据是json
格式(右键单击页面,查看页面来源,然后搜索productJson
) 。因此,您可以检查它的开始位置和结束位置,并使用json.loads()
将该切片反序列化为Python对象:
import requests
import json
page = requests.get('http://www.bendonlingerie.com.au/pleasure-state-d-arcy-delatour-soft-cup-bra-jester-red-p21-2346w')
content = page.text
start = content.find('productJson') + 13
end = content.find('function comboListClick') - 2
data = json.loads(content[start:end])
sizes = data['attributes']['172']['options']
print(len(sizes))
输出:
3