gpt4 book ai didi

python - 不确定如何从网络上抓取可能位于多个不同位置的特定值

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:11 25 4
gpt4 key购买 nike

所以我一直在开发一个网络抓取程序,并且在最后一点上遇到了一些困难。

有一个网站显示游戏中的战斗记录,如下所示:

示例 1:https://zkillboard.com/kill/44998359/

示例 2:https://zkillboard.com/kill/44917133/

我总是试图抓取获得致命一击的玩家的完整信息。这意味着他们的名字、公司名称和联盟名称。

上述示例的信息是:

示例 1:名称 = Happosait, Corp. = Arctic Light Inc.,Alliance = Arctic Light

示例 2:名称 = Lord Veninal,Corp. = Sniggerdly,联盟 = Pandemic Legion

虽然“最后一击”总是与名称一起列在右上角,但该名称也没有与之相关的公司和联盟。完整信息始终列在右栏下方“## 参与”中,但他们在该栏中的位置取决于他们在战斗中造成的伤害,因此并不总是在顶部或特定的任何位置事情。

所以虽然我可以通过以下方式获取他们的名字:

kbPilotName = soup.find_all('td', style="text-align: center;")[0].find_all('a', href=re.compile('/character/'))[0].img.get('alt')

我怎样才能获得他们的其余信息?

最佳答案

有一个 textarea 元素,其中包含您要查找的所有数据。一切都在一篇文本中,但它是结构化的。您可以选择不同的方式来解析它,但这里是一个使用正则表达式的示例:

import re

from bs4 import BeautifulSoup
import requests

url = 'https://zkillboard.com/kill/44998359/'

pattern = re.compile(r"(?s)Name: (.*?)Security: (.*?)Corp: (.*?)Alliance: (.*?)")

with requests.Session() as session:
session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'}

response = session.get(url)
soup = BeautifulSoup(response.content)

data = soup.select('form.form textarea#eft')[0].text

for name, security, corp, alliance in pattern.findall(data):
print name.strip()

打印:

Happosait (laid the final blow)
Baneken
Perkel
Tibor Vherok
Kheo Dons
Kayakka
Lina Ectelion
Jay Burner
Zalamus
Draacan Ferox
Luwanii
Jousen Momaki
Varcuntis Morannear
Grimm K-Man
Wob'Niar
Godfrey Silvarna
Quintus Corvus
Shadow Altair
Sieren
Isha Vir
Argyrosdraco
Jack None
Strixi
<小时/>

替代解决方案(解析“涉及”页面):

from bs4 import BeautifulSoup
import requests

url = 'https://zkillboard.com/kill/44998359/'
involved_url = 'https://zkillboard.com/kill/44998359/involved/'

with requests.Session() as session:
session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'}

session.get(url)

response = session.get(involved_url)
soup = BeautifulSoup(response.content)

for row in soup.select('table.table tr.attacker'):
name, corp, alliance = row.select('td.pilot > a')
print name.text, corp.text, alliance.text

关于python - 不确定如何从网络上抓取可能位于多个不同位置的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28840619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com