2015-11-20 2 views
0

Я хочу, чтобы очистить названия стран и столиц стран, из этой ссылке: https://en.wikipedia.org/wiki/List_of_national_capitals_in_alphabetical_orderВеб соскоб с BeautifulSoup

От HTML код, я ищу все эти:

from bs4 import BeautifulSoup 
import requests 

BASE_URL = "https://en.wikipedia.org/wiki/List_of_national_capitals_in_alphabetical_order" 

html = requests.get(BASE_URL).text 
soup = BeautifulSoup(html, "html.parser") 
countries = soup.find_all("td") 

print (countries) 

Но я не знаю, как на самом деле получить то, что находится между тегами, тем более, что в них нет информации.

Я чувствую, что это довольно просто, но я не могу понять все учебники, так как они используют классы, и эта страница вики не имеет классов для ее информации внутри таблицы.

+1

Вы можете использовать любой допустимый идентифицирующий признак, чтобы выбрать что-то для извлечения. Возможно, вам следует обновить свой вопрос с кратким анализом страницы, которую вы пытаетесь манипулировать. Некоторые общие, но хрупкие подходы - «найти третью таблицу на странице» или «найти таблицу после заголовка первого подраздела», но, возможно, вы можете придумать что-то более надежное. – tripleee

ответ

0

Как об этом один:

>>> table = soup.find('table', attrs={'class': 'wikitable'}) # find the table 
>>> tds = table.find_all('td') # get all the table data 
>>> countries = [tds[i:i+3] for i in range(0, len(tds), 3)] # get all the countries' data 
>>> result = [[item.text for item in country] for country in countries] # get the final result 
>>> print ' /'.join(result[0]) 
Abu Dhabi / United Arab Emirates/
1

Вам просто нужно добавить код для перебора столбцов таблицы следующим образом:

from bs4 import BeautifulSoup 
import requests 

BASE_URL = "https://en.wikipedia.org/wiki/List_of_national_capitals_in_alphabetical_order" 

capitals_countries = [] 

html = requests.get(BASE_URL).text 
soup = BeautifulSoup(html, "html.parser") 
country_table = soup.find('table', {"class" : "wikitable sortable"}) 

for row in country_table.find_all('tr'): 
    cols = row.find_all('td') 

    if len(cols) == 3: 
     capitals_countries.append((cols[0].text.strip(), cols[1].text.strip())) 

for capital, country in capitals_countries: 
    print('{:35} {}'.format(capital, country)) 

Это будет отображать капитальные и страновые пары, начиная следующим :

Abu Dhabi       United Arab Emirates 
Abuja        Nigeria 
Accra        Ghana 
Adamstown       Pitcairn Islands 
Addis Ababa       Ethiopia 
Algiers        Algeria 
Alofi        Niue 
Amman        Jordan 
Смежные вопросы