Соскоб в сети с BeautifulSoup в Википедии - PullRequest
1 голос
/ 10 февраля 2020

Я новичок в python и пытаюсь использовать BeautifulSoup для извлечения всех названий станций поездов на странице Википедии из третьего столбца википедии. я пробовал приведенный ниже код, но он возвращает каждую строку ячеек в виде 1 группы информации

contentTable  = soup.find('table', { "class" : "wikitable"})
cols  = contentTable.find_all('td')
for col in cols:
    soup.find_all("a")
    print(col.get_text())

, как показано ниже, представляющей 1 строку из таблицы:

CG2 
TE [a]
Changi Airport
樟宜机场
சாங்கி விமானநிலையம்
8 February 2002
Changi Airport

CGA
Changi
Singapore Changi Airport,  Changi Airport PTB2 Bus Terminal

ожидаемый кадр данных колонка названия станций :

Station Names
Jurong East
Bukit Batok
etc...

Может ли кто-нибудь научить меня, как правильно это кодировать? Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

попробуйте

import requests
from bs4 import BeautifulSoup

# url to be scrape
URL = "https://en.wikipedia.org/wiki/List_of_Singapore_MRT_stations"

PAGE = requests.get(URL)

# get HTML content
SOUP = BeautifulSoup(PAGE.content, 'lxml')  # lxml is faster then html.parser

contentTable = SOUP.find('table', {"class": "wikitable"})

rows = contentTable.findAll('tr')

for tr in rows:
    columns = tr.find_all('td')
    for index, td in enumerate(columns):
        if index == 2:
            print(td.text)
0 голосов
/ 10 февраля 2020

Ваша программа просто печатает текстовое содержимое каждого тега 'td' на вики-сайте.

Попробуйте вместо этого:

contentTable = soup.find('table', {"class": "wikitable"})
trs = contentTable.find_all('tr')

for tr in trs:
    tds = tr.find_all('td')
    for td in tds:
        if tds.index(td) == 2:
            print(td.get_text())

Сначала она очищает каждую строку, находит каждую ' td'-тег в этой строке и распечатывает его содержимое, если это третий 'td'-тег в указанной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...