我首先要说的是,我对Python比较陌生。我最近一直在开发一个Slack机器人,这就是我到目前为止的进展。
source = requests.get(url).content
soup = BeautifulSoup(source, 'html.parser')
price = soup.findAll("a", {"class":"pricing"})["quantity"]
这是我想要抓取的HTML代码。
<a class="pricing" saleprice="240.00" quantity="1" added="2017-01-01"> S </a>
<a class="pricing" saleprice="21.00" quantity="5" added="2017-03-14"> M </a>
<a class="pricing" saleprice="139.00" quantity="19" added="2017-06-21"> L </a>
当我只使用soup.find()
时,我能够找到第一个量值,但是我需要在一个列表中包含所有的量值。我考虑过使用一个不同的库,比如lxml,而不是bs4,但也没有任何成功的机会。任何帮助都非常感谢,因为我已经在这上面花了很长时间了。
发布于 2017-07-31 08:39:54
findAll
方法返回一个bs4 Tag
元素列表,因此不能直接选择属性。但是,您可以使用简单的列表理解从该迭代表中的项中选择属性。
price = [a.get("quantity") for a in soup.findAll("a", {"class":"pricing"})]
请注意,在访问属性时最好使用get
,因为如果键在attrs
字典中不存在,它将返回None
(或者您可以设置默认值)。
正如Jon Clements所指出的,如果你不想你的列表中有数量项,你可以通过“None
”和“quantity”进行过滤,以防某些项没有“quantity”属性。
price = [a["quantity"] for a in soup.find_all("a", {"class":"pricing", "quantity":True})]
https://stackoverflow.com/questions/45410774
复制