我正在尝试抓取多个订单项。我可以让它重复刮两次,但它没有找到所有项目,只是第一项两次。
from bs4 import BeautifulSoup
import requests
source = requests.get('https://gist.githubusercontent.com/cloudjumper2000/2f2bef395811b8f25cc3a9c8e3834117/raw/54d71f17d7e2169006eb7d8963a0e176f1448efe/nemin_sample.html').text
soup = BeautifulSoup(source, 'lxml')
for products in soup.find_all('li', class_='widget'):
itemurl = soup.find('a', class_='product')
print(itemurl.get('href'))
image = soup.find('img', class_='lazy-load')
print(image.get('data-src'))
title = soup.find('div', class_='title').text
print(title)
#price = soup.find('div', class_='price')
price = soup.find(class_='product-price').find(class_="price").text
print(price)
countdown = soup.find(class_='product-countdown')
print(countdown.get('data-countdown'))
watchlist = soup.find(class_='watchlist')
print(watchlist.get('data-itemid'))
print()
输出:
/Item/39138113
http://example.com/39138113-thumb.jpg
Item listing number 1
$6.99
3/9/2018 6:48:45 AM
39138113
/Item/39138113
http://example.com/39138113-thumb.jpg
Item listing number 1
$6.99
3/9/2018 6:48:45 AM
39138113
这是我正在抓的HTML。
答案 0 :(得分:1)
这里:
for products in soup.find_all('li', class_='widget'):
itemurl = soup.find('a', class_='product')
第二个soup.find
调用将返回整个文档中的第一个匹配元素。要在匹配的li
元素中搜索,请改为使用products.find
:
for products in soup.find_all('li', class_='widget'):
itemurl = products.find('a', class_='product')
答案 1 :(得分:1)
当您编写soup.find(...)
时,您将始终获得与查询匹配的HTML中的第一个元素。因为您的循环找到两个产品,所以查询重复两次。
如果我理解正确,您想要废弃每件产品的图片,价格等?在这种情况下,请在for循环中将soup.find(...)
替换为products.find(...)
,例如:
for products in soup.find_all('li', class_='widget'):
itemurl = products.find('a', class_='product')
...