在表单内抓取内容 - BeautifulSoup

时间:2017-10-12 13:08:01

标签: python web-scraping beautifulsoup

我正在尝试使用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“捕获”这些数据?

1 个答案:

答案 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