我试图在易趣网页上刮起每一件物品的标题。这就是那一页。我第一次尝试刮第一个清单的标题(代码的第5-7行),我成功地打印了第一个清单的标题。但是当我试图刮掉ebay页面上的每一个标题(第8-10行)时,什么都不会被打印出来。我的逻辑有缺陷吗?谢谢!
1. from bs4 import BeautifulSoup
2. import requests
3. source = requests.get("https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2380057.m570.l1313&_nkw=hippo&_sacat=0").text
4. soup = BeautifulSoup(source, "lxml")
5. listing = soup.find("li", class_=("s-item s-item--watch-at-corner"))
6. title = soup.find("h3", class_=("s-item__title")).text
7. print(title)
8. for listing in soup.find_all("li", class_=("s-item s-item--watch-at-corner")):
9. title = soup.find("h3", class_=("s-item__title")).text
10. print(title)发布于 2020-08-27 20:52:42
每次在汤上调用find("h3", class_=("s-item__title"),都需要对循环中的每个列表调用它,否则它总是会获取第一个标题。另外,请记住,无论出于什么原因,eBay页面上都有一些隐藏的结果,也许可以检查一下,看看您是否想忽略这些结果,或者也包括这些结果。我在循环中添加了枚举函数,只是为了跟踪结果的数量。
我使用这个选择器在chrome工具li.s-item.s-item--watch-at-corner h3.s-item__title上找到了所有的清单。
from bs4 import BeautifulSoup
import requests
source = requests.get("https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2380057.m570.l1313&_nkw=hippo&_sacat=0").text
soup = BeautifulSoup(source, "lxml")
listing = soup.find("li", class_=("s-item s-item--watch-at-corner"))
title = soup.find("h3", class_=("s-item__title")).text
print(title)
for i, listing in enumerate(soup.find_all("li", class_=("s-item s-item--watch-at-corner"))):
title = listing.find("h3", class_=("s-item__title")).text
print("[{}] ".format(i) + title)结果:
[0] Pewter Hippopotamus Hippo Figurine
[1] Hippopotamus Figurine 1.5" Gemstone Opalite Crystal Healing Carved Statue Decor
[2] hippopotamus coffee cafe picture animal hippo art tile gift
[3] NEW! Miniature Bronze Hippo Figurine Miniature Bronze Statue Animal Collectible
[4] Hippopotamus Gzhel porcelain figurine hippo handmade
[5] Hippopotamus Gzhel porcelain figurine hippo souvenir handmade and hand-painted
....发布于 2020-08-27 20:54:09
在快速浏览文档之后
BeautifulSoup的.find_all()方法返回一个列表(正如人们所期望的)。但是,在我看来,for循环中的.find()只是再次查询响应,而不是对生成的列表进行操作。我希望手动提取标题,例如:
title = listing['some_property']
或者您正在使用的库提供了另一种方法。
发布于 2020-08-27 21:06:12
通过查看代码,您没有检查该类的类型。
from bs4 import BeautifulSoup
import requests
source=requests.get("https://www.ebay.com/sch/i.html_from=R40&_trksid=p2380057.m570.l1313&_nkw=hippo&_sacat=0").text
soup = BeautifulSoup(source, "lxml")
listing = soup.find("li", class_=("s-item s-item--watch-at-corner"))
title = soup.find("h3", class_=("s-item__title")).text
print(type(listing))的结果。
<class 'NoneType'>所以解析结束了,因为没有li标记要查找。
https://stackoverflow.com/questions/63623757
复制相似问题