【问题标题】:Get text between tags BeautifulSoup4获取标签之间的文本 BeautifulSoup4
【发布时间】:2016-03-30 20:23:21
【问题描述】:

我尝试抓取 99damage 顶级 CS:GO 玩家列表,但在获取玩家姓名时遇到问题。

<a href="http://csgo.99damage.de/edb/player/4151-krimz" class="item small">
    <span stype="width:80px;"> 1. </span>
    <span style="width: 280px;">
        <img src="https://cdn1.gamesports.net/img/flags/se.gif" border="0" alt="se" title="Sweden">
        " KRiMZ "
    </span>

“KRiMZ”是我在这种情况下尝试获得的玩家名字,但还有很多其他名字,所以我不能只搜索 KRiMZ。我在网上搜索了解决方案,但没有找到解决我问题的解决方案。

【问题讨论】:

  • 你还尝试过哪些其他代码?

标签: python html python-3.x web-scraping bs4


【解决方案1】:

我会使用CSS selector(基于播放器配置文件 URL 的 player 部分)定位每个播放器元素,然后在其中找到前 2 个跨度 - 第一个是排名,第二个是用户名:

for player in soup.select("#content a[href*="player/"]"):
    rank, name = player.find_all("span")[:2]
    print(rank.get_text(strip=True), name.get_text(strip=True))

这是我正在执行的完整代码:

import requests
from bs4 import BeautifulSoup

url = "http://csgo.99damage.de/de/edb/players"
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"})

soup = BeautifulSoup(response.content, "html.parser")
for player in soup.select('#content a[href*="player/"]'):
    rank, name = player.find_all("span")[:2]
    print(rank.get_text(strip=True), name.get_text(strip=True))

打印:

1. KRiMZ
2. olofmeister
3. JW
4. flusha
5. dennis
6. dev1ce
7. dupreeh
8. Xyp9x
9. Karrigan
10. cajunb
11. friberg
12. GeT_RiGhT
13. f0rest
14. Xizt
15. flamiE
16. GuardiaN
17. seized
18. Edward
19. Zeus
20. kioShiMa
21. pronax
22. Happy
23. NBK

【讨论】:

  • 首先,感谢您的回答,但它给了我一个错误:Traceback (most recent call last): File "/Users/me/Documents/textscraper2.py", line 29, in &lt;module&gt; rank, name = player.find_all("span")[:2] ValueError: not enough values to unpack (expected 2, got 0)
猜你喜欢
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多