首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从特定页面抓取某些URL

从特定页面抓取某些URL
EN

Stack Overflow用户
提问于 2020-08-12 18:54:31
回答 2查看 39关注 0票数 0

我正在尝试从一个页面中抓取所有的URLS,这些URLS都与一个主题相关。

我用漂亮的汤来做这件事。

我目前的尝试是

代码语言:javascript
复制
urls = soup.find_all('a', href=True)

但是页面上有很多额外的URLS,我不想刮掉。

该页面是:https://www.basketball-reference.com/players/

我想要抓取所有玩家的名字以及他们的参考代码,例如

代码语言:javascript
复制
 <a href="/players/a/allenra02.html">Ray Allen</a>,

会将'Ray Allen/allenra02‘添加到列表中。

我如何添加一个所需的前缀到一个网址搜索使用美丽的汤?例如'players/‘

EN

回答 2

Stack Overflow用户

发布于 2020-08-12 19:06:26

您可以使用已编译的正则表达式作为.find_all()中的href=参数。

例如:

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

打印:

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

Stack Overflow用户

发布于 2020-08-12 19:08:39

尝尝这个,

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

代码语言:javascript
复制
Kareem Abdul-Jabbar/abdulka01
Ray Allen/allenra02
LaMarcus Aldridge/aldrila01
...
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63375048

复制
相关文章

相似问题

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