![](/img/trans.png)
[英]I'm facing a problem with my web scraping code I don't really know the problem is
[英]web scraping problem with data i don't know how to export information from file.html to my python programme
最近我開始研究 Web 抓取,今天我給自己一個挑戰,我試圖從 tibia.com 寫出關於每個世界的信息,關於世界的名稱,有多少人在上面玩,它是什么類型的服務器等。
我創造了這樣的東西
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup as soup
from fake_useragent import UserAgent
my_url = 'https://www.tibia.com/community/?subtopic=worlds'
uClient = urlopen(Request(my_url, headers={'User-Agent': 'Mozilla'}))
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("tr", {"class":['Even', 'Odd']})
for container in containers:
informations = containers.findAll("td")
world = informations[0].txt
但我不知道如何從 td 中提取信息,我的數據文件如下所示:
<tr class="Odd">
<td style="width: 150px;"><a href="https://www.tibia.com/community/?subtopic=worlds&world=Cosera">Cosera</a>
</td>
<td style="text-align: right;">75</td>
<td>North America</td>
<td>Optional PvP</td>
它來自 92 個世界,我正在尋找的是如何從這條線上提取有關世界的信息
<td style="width: 150px;"><a href="https://www.tibia.com/community/?subtopic=worlds&world=Cosera">Cosera</a>
如果你給我注意如何做到這一點,我想我會弄清楚其他一切。
如果有人有想法,我會很感激你的線索。
我不完全確定您的意思,但我會嘗試為您的問題提供解決方案。
看起來您正試圖從頁面上的表格中獲取所有行信息。 最簡單的方法是首先獲取您已經成功完成的所有 <tr> 元素(所有行)。
然后我們要遍歷這些行以從中提取數據。
我不確定您是只想要“Cosera”世界,還是只想要整張桌子。 如果你想要整個表,你可以刪除下面代碼中的if
語句。
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup as soup
my_url = 'https://www.tibia.com/community/?subtopic=worlds'
world_to_find = 'Cosera'
uClient = urlopen(Request(my_url, headers={'User-Agent': 'Mozilla'}))
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
all_rows = page_soup.find_all('tr', {"class":["Odd", "Even"]})
for row in all_rows:
if (row.select_one("td").text == world_to_find):
data = {}
row = row.findChildren("td" , recursive=False)
data['world'] = row[0].text
data['online'] = row[1].text
data['location'] = row[2].text
data['pvp_type'] = row[3].text
data['additional_info'] = row[5].text
print(data)
輸出:
{'world': 'Cosera', 'online': '86', 'location': 'North America', 'pvp_type': 'Optional PvP', 'additional_info': 'blocked'}
如果這不是你的意思,請在你的帖子中解釋你到底想要 output 是什么
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.