python - 如何将我的功能应用于 eBay Scraper 页面上的所有列表项“li class”
问题描述
python 和 BeautifulSoup 的新手。
我无法将我的函数应用于此 eBay 已售商品页面上的所有列表项(li 类)。
每个已售出的列表都显示为一个 li 类。下面是网址。
这是我的代码...
def rookie_card_info(url):
r = requests.get(url)
soup = bs(r.content)
contents = soup.prettify()
rookie_card_list = soup.find_all(class_="srp-results srp-list clearfix")
#How to to apply to all list items
display_image = soup.find(class_="s-item__image-img")
img_src = display_image.get('src')
test = Image(img_src)
display(test)
print(img_src)
display_card = soup.find(class_="s-item__link")
card_title = display_card.find("h3")
get_card_title = card_title.text
print(get_card_title)
display_sold_price = soup.find(class_="s-item__detail s-item__detail--primary")
card_sold_price = display_sold_price.find("span")
sold_price_text = card_sold_price.find(class_="POSITIVE")
print(sold_price_text.string)
display_sold_date = soup.find(class_="s-item__ended-date s-item__endedDate")
card_sold_date = display_sold_date.string
print(card_sold_date)
rookie_card_info("https://www.ebay.com/sch/i.html?_from=R40&_nkw=2017+patrick+mahomes+psa+10+auto&_sacat=0&LH_TitleDesc=0&LH_Complete=1&LH_Sold=1&_ipg=100")
我编写了以下代码行,试图识别页面上包含已售结果页面上所有li 类对象的特定类(大约有 65 个结果)。
rookie_card_list = soup.find_all(class_="srp-results srp-list clearfix")
当我从这行代码打印 html 时。它包含我需要为我的数据解析的所有正确的 html。
我正在解析的数据是图像 URL、标题、销售日期和销售价格。
我得到正确的数据,如下所示......
https://i.ebayimg.com/thumbs/images/g/2BwAAOSwETVfzAFT/s-l225.jpg
2017 Armed & Dangerous Patrick Mahomes Auto MINT Condition PSA 10? Rookie Signed
$2,500.00
Dec-27 12:46
但是,我只从页面上的第一个“li 类”列表中获取数据。而不是所有 65 个结果的数据。
问题:
我该怎么做才能获取所有 65 个结果的数据。我需要一个可以应用于不同 URL 的“即插即用”解决方案。
解决方案
我不会为你写完整的答案。相反,请指点:
获取卡片列表:
rookie_card_list = soup.select('.s-item')
然后遍历其中的每个项目:
for current_card in rookie_card_list:
- 重新编写你的函数来解决
current_card
while循环,即让一个单独的函数生成汤,然后有另一个函数专门接收你当前的卡并从该卡返回你想要的项目列表(也许然后添加到整体全局列表,您稍后会转向数据框?)。添加任何错误处理,例如如果没有找到返回什么?
例如
def items_from_current_card(current_card):
card_title = current_card.find("h3").text
# etc
return [card_title, ......]
- 恐怕很少有即插即用的网络抓取答案。您需要制定一个足够通用的解决方案来处理尽可能多的页面。
推荐阅读
- javascript - 在单击事件html的新窗口中打开图像
- swift - 如何使用 swift 在 Mac OS 应用程序中从一个 xib 窗口向另一个窗口发送和接收数据?
- docker - Go 应用程序在使用 docker-compose 运行时失败并退出,但使用 docker run 命令可以正常工作
- sql - 使用 sql null 类型的验证器?
- reactjs - 如何为 React 容器组件编写 Jest 测试用例?
- amazon-web-services - redis所有键都没有迁移到集群
- spring-batch - 如何处理整个xml然后返回片段
- java - 使用 HashMap 进行搜索
- swift - 加载 NSCollectionViewItem 时出错
- postgresql - 查询执行缓慢