Python - 美丽的汤选择仅返回[]

时间:2016-12-21 06:42:59

标签: python python-3.x beautifulsoup bs4

我目前正在学习Udemy的Python教程(总新手到Python)。 我目前正处于一个美丽的汤区,我们正忙于练习,以便从亚马逊上的作者手册中剔除价格。 我的代码如下:

import bs4, requests
url = 'https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

response = requests.get(url, headers=headers)
response.raise_for_status()
soup = bs4.BeautifulSoup(response.text, 'html.parser')
soup.select('#addToCart > a > h5 > div > div.a-column.a-span4.a-text-right.a-span-last > span.a-size-medium.a-color-price.header-price')

当我检查价格元素的路径时,我可以看到:

<span class="a-size-medium a-color-price header-price"> 


            $25.45



    </span>

但是,当我通过 soup.select 复制并粘贴它并运行python命令时,我只返回 [] ,即2个方括号。我应该得到第二个代码框的内容。

更新:在我输入问题的时间段内,它确实显示了正确的结果,框中的内容为25.45美元,但5分钟后它又回到了获得[]括号的结果。我支持代理,并且在没有通过代理的情况下尝试过,结果没有变化。在执行 response.raise_for_status()时,我没有收到任何错误。请帮助一下吗?

(请记住,我并不打算屏蔽任何商业网站,我非常希望将我的学习应用到内部场景中)

谢谢!

1 个答案:

答案 0 :(得分:1)

过度复杂化CSS选择器并使其变得脆弱 - 严重依赖于页面布局。您不必通过完整的父子链来查找元素。选择最可靠,可读和适当的点,您可以根据定位器。例如,在这种情况下,以下内容适用于我:

soup.select('#addToCart .header-price')
相关问题