簡體   English   中英

web 數據抓取問題我不知道如何從文件中導出信息。html 到我的 python 程序

[英]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&amp;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&amp;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.

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