在下面的示例25709中,我只尝试提取数字部分,并将其添加到一个变量,让我们称其为athleteID,稍后我可以将其添加到动态URL中,以迭代并发送搜索请求:
'<a href="../athletehistory/?athleteNumber=25709" target="_top">Zola Budd</a>'我将这些URL(或部分URL)的列表存储在dataframe中的列表中,并且我使用split('=')函数对此数据帧进行了两次迭代,并设法使其达到下面的点。
i=[]
id_list=[]
for id in df2['athleteURL']:
i = id.split('\=')
id_list.append(i)
print(id_list)然后生成一个列表,其中一行如下所示:
'<a href', '"../athletehistory/?athleteNumber', '25709" target', '"_top">Zola Budd</a>'然后,我使用'('"')‘进行了第二次迭代,并得到了下面的结果:
id_list2=[]
for id2 in id_list[2]:
j = id2.split('\"')
id_list2.append(j)
#print(id_list2[2])
athleteIDnumber = id_list2[2]
print(athleteIDnumber)
['2967288', ' target']然而,这就是我现在遇到的问题,因为它似乎是列表中的一个元素,而且我不确定这是不是最有效的提取该行的方法,因为我还在努力使用其他regex函数。
任何建议或支持都将不胜感激。谢谢,克里斯
发布于 2021-11-27 09:04:07
from urllib.parse import urlparse, parse_qs
from bs4 import BeautifulSoup
spam = '<a href="../athletehistory/?athleteNumber=25709" target="_top">Zola Budd</a>'
def get_athlete_number(html):
soup = BeautifulSoup(html, 'html.parser')
href = soup.find('a').get('href')
return parse_qs(urlparse(href).query).get('athleteNumber', [None])[0]
print(get_athlete_number(spam))输出
25709使用bs4解析html并获取url。使用标准库中的urllib.parse解析url。定义一个函数并将其应用于具有html值的列。请注意,该函数返回str
https://stackoverflow.com/questions/70133303
复制相似问题