簡體   English   中英

從特定頁面抓取某些 URL

[英]Scraping certain URL from specific page

我正在嘗試從頁面中抓取所有與一個主題相關的 URL。

我正在用漂亮的湯來做這件事。

我目前的嘗試是

urls = soup.find_all('a', href=True)

但是頁面上有很多額外的 URL,我不想抓取。

頁面為: https://www.basketball-reference.com/players/

我想抓取所有玩家的名字以及他們的參考代碼,例如

 <a href="/players/a/allenra02.html">Ray Allen</a>,

會將 'Ray Allen/allenra02 添加到列表中。

如何使用漂亮的湯向 url 搜索添加所需的前綴? 例如“玩家/”

您可以在.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.

嘗試這個,

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
...
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM