我正在尝试从一个页面中抓取所有的URLS,这些URLS都与一个主题相关。
我用漂亮的汤来做这件事。
我目前的尝试是
urls = soup.find_all('a', href=True)但是页面上有很多额外的URLS,我不想刮掉。
该页面是:https://www.basketball-reference.com/players/
我想要抓取所有玩家的名字以及他们的参考代码,例如
<a href="/players/a/allenra02.html">Ray Allen</a>,会将'Ray Allen/allenra02‘添加到列表中。
我如何添加一个所需的前缀到一个网址搜索使用美丽的汤?例如'players/‘
发布于 2020-08-12 19:06:26
您可以使用已编译的正则表达式作为.find_all()中的href=参数。
例如:
import re
import requests
from bs4 import BeautifulSoup
url = 'https://www.basketball-reference.com/players/'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
r = re.compile(r'/players/.+/(.*?)\.html')
out = []
for a in soup.find('ul', class_="page_index").find_all('a', href=r):
out.append('{}/{}'.format(a.get_text(strip=True), r.search(a['href']).group(1)))
from pprint import pprint
pprint(out)打印:
['Kareem Abdul-Jabbar/abdulka01',
'Ray Allen/allenra02',
'LaMarcus Aldridge/aldrila01',
'Paul Arizin/arizipa01',
'Carmelo Anthony/anthoca01',
'Tiny Archibald/architi01',
'Charles Barkley/barklch01',
'Kobe Bryant/bryanko01',
'Larry Bird/birdla01',
'Walt Bellamy/bellawa01',
'Rick Barry/barryri01',
'Chauncey Billups/billuch01',
'Wilt Chamberlain/chambwi01',
'Vince Carter/cartevi01',
'Maurice Cheeks/cheekma01',
'Stephen Curry/curryst01',
...and so on.发布于 2020-08-12 19:08:39
尝尝这个,
import requests
url = 'https://www.basketball-reference.com/players/'
soup = BeautifulSoup(requests.get(url).text, "html.parser")
ul = soup.find("ul", attrs={'class':"page_index"})
for li in ul.findAll("li"):
# ignore the first value (index A,B...)
for player in li.select("a")[1:]:
print(
player.text + "/" + player['href'].split("/")[-1].replace(".html", "")
)Kareem Abdul-Jabbar/abdulka01
Ray Allen/allenra02
LaMarcus Aldridge/aldrila01
...
...https://stackoverflow.com/questions/63375048
复制相似问题