英文:
How do I navigate a table without any easily accessible distinctions?
问题
我现在是你的中文翻译,这部分代码不需要翻译。你遇到的问题是如何提取星期几或日期以及相应的时间,但不知道如何操作。你注意到教授和他们的时间段之间只有一个较短的tr,里面只有一个td,而不是通常的两个,但不知道如何使用它。是否有一种聪明的方法来实现这个目标?
英文:
I'm working on a small project to learn python better (right now BeautifulSoup), and got stuck with no idea how to move forward. I am trying to scrape data from www.we.umg.edu.pl/ktm/konsultacje.
As for now I have this part of code:
import requests
from bs4 import BeautifulSoup
# Make a GET request to the URL
url = "https://we.umg.edu.pl/ktm/konsultacje"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
roomsProfessors = soup.find_all('h3')
# Lists for sorted data
professors = []
rooms = []
# Get data about rooms and professors and fill their lists
for roomProfessor in roomsProfessors:
professor = []
for child in roomProfessor:
if child.name == 'br':
continue
child = child.string.replace('\t', '').replace('\n', '')
if 'pok.' in child:
rooms.append(child)
else:
professor.append(child)
professors.append(professor)
However I got stuck right now. I want to extract weekdays or dates with the corresponding hour, but have no idea how to do it.
I noticed that the part with professor and their hours is separated with one shorter tr with just one td inside instead of usual two, but have no idea how to use it.
Is there some smart way to achieve this?
答案1
得分: 1
这是你要翻译的代码部分:
Not sure what your expected output should look like, but you could iterate with `find_next_siblings()` or `previous_siblings()`
import requests
from bs4 import BeautifulSoup
url = "https://we.umg.edu.pl/ktm/konsultacje"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
data = []
for p in soup.select('tr:has(h3)'):
d ={
'prof': p.h3.contents[0].strip(),
'room': p.h3.contents[-1].strip(),
'times': []
}
for e in p.find_next_siblings('tr'):
if e.h3:
break
if len(e.text.strip()) > 1 and not e.h5:
d['times'].append(e.get_text('|',strip=True))
data.append(d)
data
这是翻译后的内容,只包括代码部分:
不确定您期望的输出应该是什么,但您可以使用`find_next_siblings()`或`previous_siblings()`进行迭代。
import requests
from bs4 import BeautifulSoup
url = "https://we.umg.edu.pl/ktm/konsultacje"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
data = []
for p in soup.select('tr:has(h3)'):
d ={
'prof': p.h3.contents[0].strip(),
'room': p.h3.contents[-1].strip(),
'times': []
}
for e in p.find_next_siblings('tr'):
if e.h3:
break
if len(e.text.strip()) > 1 and not e.h5:
d['times'].append(e.get_text('|',strip=True))
data.append(d)
data
英文:
Not sure what your expected output should look like, but you could iterate with find_next_siblings()
or previous_siblings()
Example
import requests
from bs4 import BeautifulSoup
url = "https://we.umg.edu.pl/ktm/konsultacje"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
data = []
for p in soup.select('tr:has(h3)'):
d ={
'prof': p.h3.contents[0].strip(),
'room': p.h3.contents[-1].strip(),
'times': []
}
for e in p.find_next_siblings('tr'):
if e.h3:
break
if len(e.text.strip()) > 1 and not e.h5:
d['times'].append(e.get_text('|',strip=True))
data.append(d)
data
Output
[{'prof': 'dr hab. inż. Andrzej Borys, prof. UMG',
'room': 'pok. C28',
'times': ['czwartek|12.00-14.00',
'11.03|09.00-10.00',
'25.03|09.00-10.00',
'15.04|09.00-10.00',
'29.04|09.00-10.00',
'10.06|10.00-11.00']},
{'prof': 'mgr inż. Dawid Budnarowski',
'room': 'pok. C-51',
'times': ['wtorek|środa|11.00-12.00|11.00-12.00']},
{'prof': 'dr inż. Tomasz Ciszewski',
'room': 'pok. C345',
'times': ['środa|15.00-17.00']},
{'prof': 'dr inż. Wiesław Citko',
'room': 'pok. C341',
'times': ['czwartek|9.00-11.00',
'04.03|11.00-12.00',
'01.04|10.00-11.00',
'20.05|12.00-13.00',
'16.06|19.00-20.00',
'07.07|16.00-17.00']},...]
答案2
得分: 1
以下是使用pandas
的代码:
import pandas as pd
import requests
from tabulate import tabulate
konsultacje = "https://we.umg.edu.pl/ktm/konsultacje"
df = (
pd
.read_html(requests.get(konsultacje).text, flavor="lxml")[0]
.dropna(axis=0, how="all")
)
df.columns = ["Kolumna 1", "Kolumna 2"]
df = df[["Kolumna 1", "Kolumna 2"]]
print(tabulate(df, headers="keys", tablefmt="psql", showindex=False))
输出:
+--------------------------------------------------------+--------------------------------------------------------+
| Kolumna 1 | Kolumna 2 |
|--------------------------------------------------------+--------------------------------------------------------|
| dr hab. inż. Andrzej Borys, prof. UMG pok. C28 | dr hab. inż. Andrzej Borys, prof. UMG pok. C28 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 12.00-14.00 |
| studia niestacjonarne | studia niestacjonarne |
| 11.03 | 09.00-10.00 |
| 25.03 | 09.00-10.00 |
| 15.04 | 09.00-10.00 |
| 29.04 | 09.00-10.00 |
| 10.06 | 10.00-11.00 |
| mgr inż. Dawid Budnarowski pok. C-51 | mgr inż. Dawid Budnarowski pok. C-51 |
| studia stacjonarne | studia stacjonarne |
| wtorek środa | 11.00-12.00 11.00-12.00 |
| dr inż. Tomasz Ciszewski pok. C345 | dr inż. Tomasz Ciszewski pok. C345 |
| studia stacjonarne | studia stacjonarne |
| środa | 15.00-17.00 |
| dr inż. Wiesław Citko pok. C341 | dr inż. Wiesław Citko pok. C341 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 9.00-11.00 |
| studia niestacjonarne | studia niestacjonarne |
| 04.03 | 11.00-12.00 |
| 01.04 | 10.00-11.00 |
| 20.05 | 12.00-13.00 |
| 16.06 | 19.00-20.00 |
| 07.07 | 16.00-17.00 |
| dr inż. Piotr Kaczorek pok. C341 | dr inż. Piotr Kaczorek pok. C341 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 11.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 18.03 | 11.00-12.00 |
| 23.04 | 19.00-20.00 |
| 13.05 | 13.00-14.00 |
| 10.06 | 12.00-13.00 |
| dr inż. Karol Korcz, prof. UMG pok. C349 | dr inż. Karol Korcz, prof. UMG pok. C349 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 11.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 05.03 | 13.00-14.00 |
| 19.03 | 13.00-14.00 |
| 23.04 | 14.00-15.00 |
| 07.05 | 12.00-13.00 |
| 03.06 | 14.00-16.00 |
| dr inż. Ewa Krac pok. C51 | dr inż. Ewa Krac pok. C51 |
| studia stacjonarne | studia stacjonarne |
| środa piątek | 10.30-11.30 10.30-11.30 |
| studia niestacjonarne | studia niestacjonarne |
| 19.03 | 13.00-14.00 |
| 23.04 | 13.00-14.00 |
| 04.06 | 14.00.15.00 |
| dr inż. Stanisław Lindner pok. C344 | dr inż. Stanisław Lindner pok. C344 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 13.00-15.00 |
| studia niestacjonarne | studia niestacjonarne |
| 19.03 | 12.00-13.00 |
| 22.04 | 10.00-11.00 |
| 06.05 | 11.00-12.00 |
| 04.06 | 11.00-12.00 |
| 18.06 | 11.00-12.00 |
| dr inż. Andrzej Łuksza pok. C341 | dr inż. Andrzej Łuksza pok. C341 |
| studia stacjonarne | studia stacjonarne |
| środa | 11.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 19.03 | 13.00-14.00 |
| 23.04 | 13.00-14.00 |
| 06.05 | 14.00-15.00 |
| 17.06 | 11.00-12.00 |
| dr inż. Beata Pałczyńska
<details>
<summary>英文:</summary>
You're not saying what your expected output should be, but here's a brute force approach with `pandas`.
```python
import pandas as pd
import requests
from tabulate import tabulate
konsultacje = "https://we.umg.edu.pl/ktm/konsultacje"
df = (
pd
.read_html(requests.get(konsultacje).text, flavor="lxml")[0]
.dropna(axis=0, how="all")
)
df.columns = ["Kolumna 1", "Kolumna 2"]
df = df[["Kolumna 1", "Kolumna 2"]]
print(tabulate(df, headers="keys", tablefmt="psql", showindex=False))
Output:
+--------------------------------------------------------+--------------------------------------------------------+
| Kolumna 1 | Kolumna 2 |
|--------------------------------------------------------+--------------------------------------------------------|
| dr hab. inż. Andrzej Borys, prof. UMG pok. C28 | dr hab. inż. Andrzej Borys, prof. UMG pok. C28 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 12.00-14.00 |
| studia niestacjonarne | studia niestacjonarne |
| 11.03 | 09.00-10.00 |
| 25.03 | 09.00-10.00 |
| 15.04 | 09.00-10.00 |
| 29.04 | 09.00-10.00 |
| 10.06 | 10.00-11.00 |
| mgr inż. Dawid Budnarowski pok. C-51 | mgr inż. Dawid Budnarowski pok. C-51 |
| studia stacjonarne | studia stacjonarne |
| wtorek środa | 11.00-12.00 11.00-12.00 |
| dr inż. Tomasz Ciszewski pok. C345 | dr inż. Tomasz Ciszewski pok. C345 |
| studia stacjonarne | studia stacjonarne |
| środa | 15.00-17.00 |
| dr inż. Wiesław Citko pok. C341 | dr inż. Wiesław Citko pok. C341 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 9.00-11.00 |
| studia niestacjonarne | studia niestacjonarne |
| 04.03 | 11.00-12.00 |
| 01.04 | 10.00-11.00 |
| 20.05 | 12.00-13.00 |
| 16.06 | 19.00-20.00 |
| 07.07 | 16.00-17.00 |
| dr inż. Piotr Kaczorek pok. C341 | dr inż. Piotr Kaczorek pok. C341 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 11.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 18.03 | 11.00-12.00 |
| 23.04 | 19.00-20.00 |
| 13.05 | 13.00-14.00 |
| 10.06 | 12.00-13.00 |
| dr inż. Karol Korcz, prof. UMG pok. C349 | dr inż. Karol Korcz, prof. UMG pok. C349 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 11.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 05.03 | 13.00-14.00 |
| 19.03 | 13.00-14.00 |
| 23.04 | 14.00-15.00 |
| 07.05 | 12.00-13.00 |
| 03.06 | 14.00-16.00 |
| dr inż. Ewa Krac pok. C51 | dr inż. Ewa Krac pok. C51 |
| studia stacjonarne | studia stacjonarne |
| środa piątek | 10.30-11.30 10.30-11.30 |
| studia niestacjonarne | studia niestacjonarne |
| 19.03 | 13.00-14.00 |
| 23.04 | 13.00-14.00 |
| 04.06 | 14.00.15.00 |
| dr inż. Stanisław Lindner pok. C344 | dr inż. Stanisław Lindner pok. C344 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 13.00-15.00 |
| studia niestacjonarne | studia niestacjonarne |
| 19.03 | 12.00-13.00 |
| 22.04 | 10.00-11.00 |
| 06.05 | 11.00-12.00 |
| 04.06 | 11.00-12.00 |
| 18.06 | 11.00-12.00 |
| dr inż. Andrzej Łuksza pok. C341 | dr inż. Andrzej Łuksza pok. C341 |
| studia stacjonarne | studia stacjonarne |
| środa | 11.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 19.03 | 13.00-14.00 |
| 23.04 | 13.00-14.00 |
| 06.05 | 14.00-15.00 |
| 17.06 | 11.00-12.00 |
| dr inż. Beata Pałczyńska pok. C339 | dr inż. Beata Pałczyńska pok. C339 |
| studia stacjonarne | studia stacjonarne |
| środa | 13.00-14.00 |
| dr inż. Dorota Rabczuk pok. C339 | dr inż. Dorota Rabczuk pok. C339 |
| studia stacjonarne | studia stacjonarne |
| wtorek | 14.00-16.00 |
| mgr inż. Wojciech Rabczuk pok. C51 | mgr inż. Wojciech Rabczuk pok. C51 |
| studia stacjonarne | studia stacjonarne |
| poniedziałek | 7.00-8.00, 12.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 05.03 | 07.00-08.00 |
| 19.03 | 11.00-12.00 |
| dr hab. inż. Agnieszka Rybarczyk, prof. UMG pok. C345 | dr hab. inż. Agnieszka Rybarczyk, prof. UMG pok. C345 |
| studia stacjonarne | studia stacjonarne |
| piątek | 10.00-12.00 |
| dr hab. inż. Wiesław Sieńko, prof. UMG pok. C208 | dr hab. inż. Wiesław Sieńko, prof. UMG pok. C208 |
| studia stacjonarne | studia stacjonarne |
| czwartek | 11.00-13.00 |
| studia niestacjonarne | studia niestacjonarne |
| 04.03 | 14:00 - 15:00 |
| 18.03 | 14:00 - 15:00 |
| 01.04 | 12:00 - 13:00 |
| 06.05 | 14:00 - 15:00 |
| 20.05 | 15:00 - 16:00 |
| 03.06 | 11:00 - 12:00 |
| mgr inż. Marta Szarmach pok. C339 | mgr inż. Marta Szarmach pok. C339 |
| studia stacjonarne | studia stacjonarne |
| wtorek | 10.00-12.00 |
| Agata Śledzińska-Płotczyk pok. C-326 | Agata Śledzińska-Płotczyk pok. C-326 |
| studia stacjonarne | studia stacjonarne |
| piątek | 15.30-16.30 |
| mgr inż. Marcin Waraksa pok. C336 | mgr inż. Marcin Waraksa pok. C336 |
| studia stacjonarne | studia stacjonarne |
| wtorek | 15.00-17.00 |
| studia niestacjonarne | studia niestacjonarne |
| 05.03 | 14.00-15.00 |
| 19.03 | 14.00-15.00 |
| 02.04 | 16.00-17.00 |
| 14.04 | 16.00-17.00 |
| 30.04 | 13.00-14.00 |
| dr hab. inż. Andrzej Żak, prof. UMG pok. C326 | dr hab. inż. Andrzej Żak, prof. UMG pok. C326 |
| studia stacjonarne | studia stacjonarne |
| wtorek | 16.00-18.00 |
| studia niestacjonarne | studia niestacjonarne |
| 04.03 | 16.00-18.00 |
| 05.03 | 10.00-11.00 |
+--------------------------------------------------------+--------------------------------------------------------+
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论