簡體   English   中英

如何從<a href>標簽中</a>獲取信息<div> <a href>BeautifulSoup 和 Python 的標簽?</a>

[英]How can I get information from an <a href> tag within <div> tags with BeautifulSoup and Python?

全部。 我有一個關於使用 Python 的 BeautifulSoup 的快速問題。 我有幾段 HTML 看起來像這樣(唯一的區別是鏈接和產品名稱),我正在嘗試從“href”屬性中獲取鏈接。

<div id="productListing1" xmlns:dew="urn:Microsoft.Search.Response.Document">
<span id="rank" style="display:none;">94.36</span>
<div class="productPhoto">
    <img src="/assets/images/ocpimages/87684/00131cl.gif" height="82" width="82" />
</div>
<div class="productName">
    <a class="on" href="/Products/ProductInfoDisplay.aspx?SiteId=1&amp;Product=8768400131">CAPRI SUN - JUICE DRINK - COOLERS VARIETY PACK 6 OZ</a>
</div>
<div class="size">40 CT</div>

我目前有這個 Python 代碼:

productLinks = soup.findAll('a', attrs={'class' : 'on'})
for link in productLinks:
    print link['href']

這有效(對於頁面上的每個鏈接,我都會得到類似/Products/ProductInfoDisplay.aspx?SiteId=1&amp;Product=8768400131 ); 但是,我一直在嘗試弄清楚是否有辦法在“href”屬性中獲取鏈接,而無需明確搜索“class =“on””。 我想我的第一個問題應該是這是否是查找此信息的最佳方式(盡管我的 CSS 和 HTML 技能不是很好,但 class="on" 似乎太籠統並且將來可能會中斷)。 我已經嘗試了多種 find、findAll、findAllnext 等方法的組合,但我無法讓它發揮作用。 這主要是我所擁有的(我重新排列並更改了很多次):

productLinks = soup.find('div', attrs={'class' : 'productName'}).find('a', href=True)

如果這不是一個好方法,我怎樣才能從<div class="productName">標簽到達<a>標簽? 如果您需要更多信息,請與我們聯系。

謝謝你。

好吧,一旦有了<div>元素,就可以通過調用find()來獲取<a>子元素:

productDivs = soup.findAll('div', attrs={'class' : 'productName'})
for div in productDivs:
    print div.find('a')['href']

但是,由於<a>就在<div>之上,您可以從 div 中獲取a屬性:

productDivs = soup.findAll('div', attrs={'class' : 'productName'})
for div in productDivs:
    print div.a['href']

現在,如果你想把所有的<a>元素放在一個列表中,你上面的代碼將不起作用,因為find()只返回一個與其條件匹配的元素。 您將獲取 div 列表並從中獲取子元素,例如,使用列表推導式:

productLinks = [div.a for div in 
        soup.findAll('div', attrs={'class' : 'productName'})]
for link in productLinks:
    print link['href']

我在 BeautifulSoup4 中給出了這個解決方案

for data in soup.find_all('div', class_='productName'):
    for a in data.find_all('a'):
        print(a.get('href')) #for getting link
        print(a.text) #for getting text between the link
您可以通過指定索引來避免那些 for 循環。
 data = soup.find_all('div', class_='productName') a_class = data[0].find_all('a') url_ = a_class[0].get('href') print(url_)

我怎樣才能分開這些<div id="text_translate"><p>我正在抓取一個網站,但我很難理解。</p><p> 我試圖將標簽分成兩組,所以當我運行 for 循環時,它應該是:</p><pre> # Group 1 <td class="right endpoint tooltip" data-endpoint="/players/pgl_cum_stats.cgi?player=adebaba01&amp;year=2023&amp;date_game=2022-10-19&amp;is_playoff_game=N" data-stat="game_season"><strong>1</strong></td> <td class="left" data-stat="date_game"><a href="/boxscores/202210190MIA.html">2022-10-19</a></td> <td class="right" data-stat="age">25-093</td> <td class="left" data-stat="team_id"><a href="/teams/MIA/2023.html">MIA</a></td> <td class="center iz" data-stat="game_location"></td> <td class="left" data-stat="opp_id"><a href="/teams/CHI/2023.html">CHI</a></td> <td class="center" csk="-8" data-stat="game_result">L (-8)</td> <td class="right" data-stat="gs">1</td> <td class="right" csk="2040" data-stat="mp">34:00</td> <td class="right" data-stat="fg">5</td> <td class="right" data-stat="fga">15</td> <td class="right" data-stat="fg_pct">.333</td> <td class="right iz" data-stat="fg3">0</td> <td class="right iz" data-stat="fg3a">0</td> <td class="right iz" data-stat="fg3_pct"></td> <td class="right" data-stat="ft">2</td> <td class="right" data-stat="fta">3</td> <td class="right" data-stat="ft_pct">.667</td> <td class="right" data-stat="orb">1</td> <td class="right" data-stat="drb">8</td> <td class="right" data-stat="trb">9</td> <td class="right" data-stat="ast">2</td> <td class="right iz" data-stat="stl">0</td> <td class="right" data-stat="blk">1</td> <td class="right" data-stat="tov">5</td> <td class="right" data-stat="pf">4</td> <td class="right" data-stat="pts">12</td> <td class="right" data-stat="game_score">1.7</td> <td class="right" data-stat="plus_minus">-15</td> # Group 2 <td class="right endpoint tooltip" data-endpoint="/players/pgl_cum_stats.cgi?player=adebaba01&amp;year=2023&amp;date_game=2022-10-21&amp;is_playoff_game=N" data-stat="game_season"><strong>2</strong></td> <td class="left" data-stat="date_game"><a href="/boxscores/202210210MIA.html">2022-10-21</a></td> <td class="right" data-stat="age">25-095</td> <td class="left" data-stat="team_id"><a href="/teams/MIA/2023.html">MIA</a></td> <td class="center iz" data-stat="game_location"></td> <td class="left" data-stat="opp_id"><a href="/teams/BOS/2023.html">BOS</a></td> <td class="center" csk="-7" data-stat="game_result">L (-7)</td> <td class="right" data-stat="gs">1</td> <td class="right" csk="2093" data-stat="mp">34:53</td> <td class="right" data-stat="fg">8</td> <td class="right" data-stat="fga">11</td> <td class="right" data-stat="fg_pct">.727</td> <td class="right iz" data-stat="fg3">0</td> <td class="right iz" data-stat="fg3a">0</td> <td class="right iz" data-stat="fg3_pct"></td> <td class="right" data-stat="ft">3</td> <td class="right" data-stat="fta">4</td> <td class="right" data-stat="ft_pct">.750</td> <td class="right" data-stat="orb">3</td> <td class="right" data-stat="drb">5</td> <td class="right" data-stat="trb">8</td> <td class="right" data-stat="ast">5</td> <td class="right" data-stat="stl">2</td> <td class="right iz" data-stat="blk">0</td> <td class="right" data-stat="tov">5</td> <td class="right" data-stat="pf">4</td> <td class="right" data-stat="pts">19</td> <td class="right" data-stat="game_score">16.6</td> <td class="right" data-stat="plus_minus">+20</td></pre><p> 然后我將把這兩個組放入一個二維列表中。</p><p> 我希望這是有道理的。 任何幫助或反饋將不勝感激!</p><p> 我試過:</p><pre> stats = player_header.find_all('td') for stat in stats: print (stat.text)</pre><p> 但我無法將這些標簽分組或分成不同的組。</p></div>

[英]How can I split these <td tags from BeautifulSoup on Python?

暫無
暫無

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

相關問題 如何使用 Python 從 BeautifulSoup 中兩個 Span 標簽之間的 A 標簽獲取信息? 我如何在beautifulsoup中獲得href標簽? 如何從 beautifulsoup4 中的標簽獲取命名空間信息? 如何獲取<a>在 python 中使用 BeautifulSoup 的 href 屬性中的數據?</a> Python + BeautifulSoup:如何從 href 屬性獲取完整鏈接? 使用 BeautifulSoup + Python 從列表中獲取所有 href 標簽和鏈接 Python Beautifulsoup,獲取href標簽,在一個標簽中 從td標簽BeautifulSoup Python獲取href屬性鏈接 無法使用 python 中的 beautifulsoup 獲取 div 內的所有 id 標簽和 a/href 標簽 我怎樣才能分開這些<div id="text_translate"><p>我正在抓取一個網站,但我很難理解。</p><p> 我試圖將標簽分成兩組,所以當我運行 for 循環時,它應該是:</p><pre> # Group 1 <td class="right endpoint tooltip" data-endpoint="/players/pgl_cum_stats.cgi?player=adebaba01&amp;year=2023&amp;date_game=2022-10-19&amp;is_playoff_game=N" data-stat="game_season"><strong>1</strong></td> <td class="left" data-stat="date_game"><a href="/boxscores/202210190MIA.html">2022-10-19</a></td> <td class="right" data-stat="age">25-093</td> <td class="left" data-stat="team_id"><a href="/teams/MIA/2023.html">MIA</a></td> <td class="center iz" data-stat="game_location"></td> <td class="left" data-stat="opp_id"><a href="/teams/CHI/2023.html">CHI</a></td> <td class="center" csk="-8" data-stat="game_result">L (-8)</td> <td class="right" data-stat="gs">1</td> <td class="right" csk="2040" data-stat="mp">34:00</td> <td class="right" data-stat="fg">5</td> <td class="right" data-stat="fga">15</td> <td class="right" data-stat="fg_pct">.333</td> <td class="right iz" data-stat="fg3">0</td> <td class="right iz" data-stat="fg3a">0</td> <td class="right iz" data-stat="fg3_pct"></td> <td class="right" data-stat="ft">2</td> <td class="right" data-stat="fta">3</td> <td class="right" data-stat="ft_pct">.667</td> <td class="right" data-stat="orb">1</td> <td class="right" data-stat="drb">8</td> <td class="right" data-stat="trb">9</td> <td class="right" data-stat="ast">2</td> <td class="right iz" data-stat="stl">0</td> <td class="right" data-stat="blk">1</td> <td class="right" data-stat="tov">5</td> <td class="right" data-stat="pf">4</td> <td class="right" data-stat="pts">12</td> <td class="right" data-stat="game_score">1.7</td> <td class="right" data-stat="plus_minus">-15</td> # Group 2 <td class="right endpoint tooltip" data-endpoint="/players/pgl_cum_stats.cgi?player=adebaba01&amp;year=2023&amp;date_game=2022-10-21&amp;is_playoff_game=N" data-stat="game_season"><strong>2</strong></td> <td class="left" data-stat="date_game"><a href="/boxscores/202210210MIA.html">2022-10-21</a></td> <td class="right" data-stat="age">25-095</td> <td class="left" data-stat="team_id"><a href="/teams/MIA/2023.html">MIA</a></td> <td class="center iz" data-stat="game_location"></td> <td class="left" data-stat="opp_id"><a href="/teams/BOS/2023.html">BOS</a></td> <td class="center" csk="-7" data-stat="game_result">L (-7)</td> <td class="right" data-stat="gs">1</td> <td class="right" csk="2093" data-stat="mp">34:53</td> <td class="right" data-stat="fg">8</td> <td class="right" data-stat="fga">11</td> <td class="right" data-stat="fg_pct">.727</td> <td class="right iz" data-stat="fg3">0</td> <td class="right iz" data-stat="fg3a">0</td> <td class="right iz" data-stat="fg3_pct"></td> <td class="right" data-stat="ft">3</td> <td class="right" data-stat="fta">4</td> <td class="right" data-stat="ft_pct">.750</td> <td class="right" data-stat="orb">3</td> <td class="right" data-stat="drb">5</td> <td class="right" data-stat="trb">8</td> <td class="right" data-stat="ast">5</td> <td class="right" data-stat="stl">2</td> <td class="right iz" data-stat="blk">0</td> <td class="right" data-stat="tov">5</td> <td class="right" data-stat="pf">4</td> <td class="right" data-stat="pts">19</td> <td class="right" data-stat="game_score">16.6</td> <td class="right" data-stat="plus_minus">+20</td></pre><p> 然后我將把這兩個組放入一個二維列表中。</p><p> 我希望這是有道理的。 任何幫助或反饋將不勝感激!</p><p> 我試過:</p><pre> stats = player_header.find_all('td') for stat in stats: print (stat.text)</pre><p> 但我無法將這些標簽分組或分成不同的組。</p></div>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM