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

Javascript 从下拉列表中选择值并获取其隐藏值,javascript,python,select,beautifulsoup,html-parsing,Javascript,Python,Select,Beautifulsoup,Html Parsing,所以我目前正在学习BeautifulSoup,我正在尝试找出如何选择下拉值,然后获取隐藏的关联值 我使用的链接是 我尝试从商品展示表单大小中选择值,选择后,我尝试拉取 name=“item\u pid”id=“商品-show-form-item\u pid”值 我通过选择大小和更改输入类型来手动测试它,以使用inspect元素显示。它成功了。但是当我尝试在python上实现它时,我得到了 AttributeError:“非类型”对象没有属性“findAll” 这是我的密码 import req

所以我目前正在学习BeautifulSoup,我正在尝试找出如何选择下拉值,然后获取隐藏的关联值

我使用的链接是

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

name=“item\u pid”id=“商品-show-form-item\u pid”值

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

AttributeError:“非类型”对象没有属性“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来实现。有人能给我举个例子吗?

如果您的页面是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呈现的,您可以尝试以下操作:

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)
输出:


您需要的数据是由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)
输出:


您要引用的元素是由javascript生成的,javascript与BS不太兼容。考虑使用硒没有其他方法来做到这一点吗?我讨厌selenium,因为它速度慢,而且对meThe来说非常不方便。您引用的元素是由javascript生成的,javascript在BS中工作得不太好。考虑使用硒没有其他方法来做到这一点吗?我讨厌selenium,因为它速度慢,而且对meI来说非常不方便。我在安装Dryscrap时遇到了问题。我尝试了pip安装,但运行的安装版本“qmake”未被识别为内部或外部命令、可操作程序或批处理文件。我在安装DrySrape时遇到问题。我尝试了pip安装,但运行的安装版本“qmake”未被识别为内部或外部命令、可操作程序或批处理文件。如何解析它以获得所需的值?我对javascript一点也不熟悉。你能提供一些例子吗?你应该使用正则表达式从脚本字符串中提取数据。您可以像对待bs的标记一样对待脚本标记,它们可以使用find()找到。我使用soup.find成功地获得了javascript,但我如何解析它,从而为相应的大小提供相应的值?我如何解析它以获得我想要的值?我对javascript一点也不熟悉。你能提供一些例子吗?你应该使用正则表达式从脚本字符串中提取数据。您可以像对待bs的标记一样对待脚本标记,它们可以使用find()找到。我使用soup.find成功地获得了javascript,但是我如何解析它,从而为相应的大小提供相应的值呢?