我如何有效地通过网络抓取这些异常值?

How do I efficiently web-scrape these abnormal values?

所以我正在尝试通过网络抓取此页面上的项目:

https://zkillboard.com/kill/44887120/overview/

其中一些相当简单,比如如果我想要掉落的 ISK 数量,我只需使用:

dropped = soup.find("td", class_="item_dropped").get_text()

这将导致:13,270,929,632.15 ISK

不过,我也想获取其他一些值,但它们更棘手。 假设我想抓取受害者的名字,在这种情况下是 DwarfMaster 如果我查看网站的源代码,它列在:<a href="/character/1248683700/">

问题是这些页面的受害者并不总是 1248683700 而且不仅如此,页面上还有其他 /characters/numbers 代表不同的字符我不想刮,虽然他们都在同一个位置。有没有比抓取每个 <a> 标签并调用第 X 个位置 /character/ 信息然后搜索具有该字符的标签更好的方法?听起来真的很马虎。然后页面上还有另一个棘手的刮擦,如果你在 45 Involved 下的右侧看,你可以看到玩家的船名,例如 Silent Ivy 的船是 Nyx 但我能找到该值的唯一方法是图像 link 的 内部 ,没有实际文本。在这种情况下:<img class="eveimage img-rounded" width="32" height="32" **alt="Nyx"** src="website.png"></img> 我怎样才能抓取 alt="Nyx" 值?

您是否考虑过您要查找的标签的位置在所有这些页面上都是固定的?

例如在第一个 table:

中第一个 table 的第一个 table 行的第一个锚点下始终可以访问 "name of the victim"
name = soup.table.table.tr.a.get('title')

至于获取那艘船的名称,请访问 img 标签的 alt 属性:

import re
shipname = soup.find_all('tr', class_="attacker")[0].find_all('a', href=re.compile('/ship/'))[0].img.get('alt')

我绕了一些弯路来访问该元素,但这应该让您了解如何访问这些属性。