首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以刮一个易趣清单的标题,但在页面上刮每一个标题(Python/BeautifulSoup/lxml)有困难。

我可以刮一个易趣清单的标题,但在页面上刮每一个标题(Python/BeautifulSoup/lxml)有困难。
EN

Stack Overflow用户
提问于 2020-08-27 20:30:37
回答 4查看 256关注 0票数 0

我试图在易趣网页上刮起每一件物品的标题。这就是那一页。我第一次尝试刮第一个清单的标题(代码的第5-7行),我成功地打印了第一个清单的标题。但是当我试图刮掉ebay页面上的每一个标题(第8-10行)时,什么都不会被打印出来。我的逻辑有缺陷吗?谢谢!

代码语言:javascript
复制
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)
EN

回答 4

Stack Overflow用户

发布于 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上找到了所有的清单。

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
    [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
....
票数 1
EN

Stack Overflow用户

发布于 2020-08-27 20:54:09

在快速浏览文档之后

BeautifulSoup的.find_all()方法返回一个列表(正如人们所期望的)。但是,在我看来,for循环中的.find()只是再次查询响应,而不是对生成的列表进行操作。我希望手动提取标题,例如:

代码语言:javascript
复制
title = listing['some_property']

或者您正在使用的库提供了另一种方法。

票数 1
EN

Stack Overflow用户

发布于 2020-08-27 21:06:12

通过查看代码,您没有检查该类的类型。

代码语言:javascript
复制
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))

的结果。

代码语言:javascript
复制
<class 'NoneType'>

所以解析结束了,因为没有li标记要查找。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63623757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档