Python - Beautiful Soup Select 只返回 []
Python - Beautiful Soup Select only returning []
我目前正在学习 Udemy 的 Python 教程(从新手到 Python)。
我目前在 Beautiful Soup 专区,我们正忙于练习如何从作者在亚马逊上的书中降价。
我的代码如下:
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">
.45
</span>
然而,当我通过 soup.select 和 运行 python 命令复制和粘贴它时,我只返回 [] 即 2 个方括号。我应该得到第二个代码框的内容。
更新:在我输入问题期间,它确实正确显示了结果,框内的内容为 25.45 美元,但 5 分钟后它又返回到仅获取 [] 括号的结果.我在代理后面,并且在不通过代理的情况下进行了尝试,结果没有任何变化。在执行 response.raise_for_status() 时,我也没有收到任何错误。请有人帮忙吗?
(请记住,我不打算在那里筛选任何商业网站,我非常想将我学到的知识应用到内部场景中)
谢谢!
您 使您的 CSS 选择器 过于复杂并使其变得脆弱 - 严重依赖于页面布局。您不必通过完整的父子链来定位元素。选择您可以作为定位器基础的最可靠、可读性和最合适的点。例如,在这种情况下,以下对我有用:
soup.select('#addToCart .header-price')
我目前正在学习 Udemy 的 Python 教程(从新手到 Python)。 我目前在 Beautiful Soup 专区,我们正忙于练习如何从作者在亚马逊上的书中降价。 我的代码如下:
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">
.45
</span>
然而,当我通过 soup.select 和 运行 python 命令复制和粘贴它时,我只返回 [] 即 2 个方括号。我应该得到第二个代码框的内容。
更新:在我输入问题期间,它确实正确显示了结果,框内的内容为 25.45 美元,但 5 分钟后它又返回到仅获取 [] 括号的结果.我在代理后面,并且在不通过代理的情况下进行了尝试,结果没有任何变化。在执行 response.raise_for_status() 时,我也没有收到任何错误。请有人帮忙吗?
(请记住,我不打算在那里筛选任何商业网站,我非常想将我学到的知识应用到内部场景中)
谢谢!
您 使您的 CSS 选择器 过于复杂并使其变得脆弱 - 严重依赖于页面布局。您不必通过完整的父子链来定位元素。选择您可以作为定位器基础的最可靠、可读性和最合适的点。例如,在这种情况下,以下对我有用:
soup.select('#addToCart .header-price')