Python和Beautifulsoup 4-findAll不会获取所有元素,只会获取第一个元素?

时间:2019-03-27 13:26:40

标签: python web-scraping beautifulsoup

我正试图从KicksUSA.com上刮擦鞋子的尺码,但似乎无法获得产品页面上显示的鞋子尺码。以该页面为例-https://www.kicksusa.com/jordan/air-jordan-13-retro-atmosphere-greyblack-white-univ-red-414571-016.html-我试图在此显示所有尺寸。

尺寸出现在我注意到的3个位置-

  1. 作为data-label元素内的a元素的div.input-box.validation-passed属性(或者,如果我们在上面的元素中,dd.last元素之内){li>
  2. option元素内,price个元素0等于select
  3. spConfig JS代码内

任何从第一个位置(data-label个元素的a个属性)获取数据的尝试都导致了None

当我使用以下代码时:

size = soup2.find('dd', attrs={'class': 'last'})
getsize = size.find('select')
getgetsize = str([e.get_text() for e in getsize.findAll('option', attrs={'price': '0'})])

我什么也没得到,好像没有具有该属性的option元素一样。

当我运行此代码时:

size = soup2.find('dd', attrs={'class': 'last'})
getsize = size.find('select')
getgetsize = str([e.get_text() for e in getsize.findAll('option')])

我只得到第一个结果,即Choose an Option...

有人知道如何获取我想要的数据吗?预先感谢。

编辑:这是绕过保护的代码段:

        headers = {
            'Host': 'www.kicksusa.com',
            'Connection': 'keep-alive',
            'Cache-Control': 'max-age=0',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/72.0.3626.121 Safari/537.36',
            'DNT': '1',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'ru,en-US;q=0.9,en;q=0.8,tr;q=0.7',
            'Cookie': 'visid_incap_459049=Evije6RoRAG1GuxEpbckJA4Ch1wAAAAAQUIPAAAAAABk8hUjgpv63FQ2WQOlcukw; incap_ses_1079_459049=UXVgNfGObEuAWEiyCWH5DiGJm1wAAAAA4XovM6FTnjT4ZWyukyoWxw==',
        }
        data2 = requests.get(url3, headers=headers)
        soup2 = BeautifulSoup(data2.text, 'html.parser')

您必须通过打开kicksusa.com并转到Cookies-> kicksusa.com

来编辑visid_incap_...=...incap_ses_...=...值。

2 个答案:

答案 0 :(得分:0)

使用findAll(),您可以获得多个组,并且需要通过e.group(0)来访问它们:

size = soup2.find('dd', attrs={'class': 'last'})
getsize = size.find('select')
for e in getsize.findAll('option')]):
      l = len(e)
      for i in l:
            getgetsize[i] = str(e.group(i).get_text()) 

答案 1 :(得分:0)

我一直试图从一块石头上取血。我一直在寻找的数据根本不存在-该网站进行了一些JS DOM操作。据我所知,唯一的方法就是获取spConfig JS代码并使用正则表达式从那里获取数据。我现在正准备使用正则表达式,谢谢大家的想法和帮助!