从下拉列表中选择值并获取隐藏值

2024-09-28 23:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我现在正在学习美丽的汤,我试图找出如何选择下拉值,然后得到它隐藏的关联值。在

我使用的链接是http://www.nakedcph.com/commodity/4876-nike-sportswear-air-max-95.

This is a html code I am referencing to

我试图从商品展示表单大小中选择值,选择后,我试图拉

name="item_pid" id="commodity-show-form-item_pid" value

我手动测试了它,通过选择大小和更改输入类型来显示使用inspect元素。而且成功了。但是当我尝试在python上实现时,我得到

AttributeError: 'NoneType' object has no attribute 'findAll'

这是我的密码

import requests
import re
import time
import timeit
from bs4 import BeautifulSoup as bs

session = requests.session()
response = session.get('http://www.nakedcph.com/commodity/4876-nike-sportswear-air-max-95')
soup = bs(response.text, 'html.parser')
select = soup.find('select', id="commodity-show-form-size")
option_tags = select.findAll('option')
print option_tags

我在这件事上耽搁了好几个小时。请帮忙 每个人都建议我通过javascript来做。有人能给我举个例子吗?在


Tags: importcomhttpsessionhtmlwwwairitem
2条回答

如果您的页面是javascript呈现的,您可以尝试如下操作:

import dryscrape
from bs4 import BeautifulSoup

session = dryscrape.Session()
url = 'http://www.nakedcph.com/commodity/4876-nike-sportswear-air-max-95'
session.visit(url)
response = session.body()
soup=BeautifulSoup(response)
print soup.select('input#commodity-show-form-item_pid')

您需要的数据是由JavaScript生成的,您可以在html代码中找到它:

import re
text = '''$(document).ready(function() {
    $('#commodity-show-thumbnails').bxSlider({ mode: 'vertical', auto: false, controls: true, pager: false, minSlides: 4, maxSlides: 4, moveSlides: 1, slideWidth: 250 });
    itemSelector('commodity-show-form', 'commodity-show-addcart-submit', [['color', 'Choose color'], ['size', 'Choose size']], { "39757": { "params": ["White/Pure Platinum", "35,5"]}, "39758": { "params": ["White/Pure Platinum", "36"]}, "39759": { "params": ["White/Pure Platinum", "36,5"]}, "39760": { "params": ["White/Pure Platinum", "37,5"]}, "39761": { "params": ["White/Pure Platinum", "38"]}, "39762": { "params": ["White/Pure Platinum", "38,5"]}, "39763": { "params": ["White/Pure Platinum", "39"]}, "39764": { "params": ["White/Pure Platinum", "40"]}, "39765": { "params": ["White/Pure Platinum", "40,5"]}, "39766": { "params": ["White/Pure Platinum", "41"]}, "39767": { "params": ["White/Pure Platinum", "42"]} }, [39757,39758,39759,39760,39761,39762,39763,39764,39765,39766,39767], 'main-cart', 'commodity-show-image');
});'''

res = re.findall(r'{ "params": (.+?)}', text)  # get text format

to_list = [eval(i) for i in res] # text to python object list

print(to_list)

输出:

^{pr2}$

相关问题 更多 >