2016-07-14 3 views
0

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

import requests,bs4 
res=requests.get('http://www.citymayors.com/statistics/largest-cities-population-125.html') 
text=bs4.BeautifulSoup(res.text,"lxml") 
fields=text.select('td[bgcolor="silver"] > font[size="-2"] > b') 
print len(fields) 
for field in fields: 
    print field.getText() 

Это выход я получаю:

23 
Tokyo/Yokohama 
New York Metro 
Sao Paulo 
Seoul/Incheon 
Mexico City 
Osaka/Kobe/Kyoto 
Manila 
Mumbai 
Delhi 
Jakarta 
Lagos 
Kolkata 
Cairo 
Los Angeles 
Buenos Aires 
Rio de Janeiro 
Moscow 
Shanghai 
Karachi 
Paris 
Istanbul 
Nagoya 
Beijing 

Но эта страница содержит 125 городов.

+1

Использование 'html.parser' вместо' lxml', я получаю 124 –

+0

Я тоже получаю 124. Отсутствующий город - это Damman в строке 120. Может иметь какое-то отношение к пространству ' Damman '? – Jarad

ответ

0

LXML отлично работает для меня, я получаю 124 города, используя свой собственный код, чтобы он не имеет ничего общего с анализатором, вы либо используете старую версию BS4 или это проблема кодирования, вы должны называющие .content и пусть запросы обрабатывать кодировку, вы также отсутствует город, используя свою логику, чтобы получить все 125:

import requests, bs4 
res = requests.get('http://www.citymayors.com/statistics/largest-cities-population-125.html') 
text = bs4.BeautifulSoup(res.content,"lxml") 
rows = [row.select_one("td + td")for row in text.select("table tr + tr")] 
print(len(rows)) 
for row in rows: 
    print(row.get_text()) 

Если запустить его, вы можете увидеть, мы получаем все города:

In [1]: import requests,bs4 
In [2]: res = requests.get('http://www.citymayors.com/statistics/largest-cities-population-125.html') 

In [3]: text = bs4.BeautifulSoup(res.text,"lxml") 

In [4]: rows = [row.select_one("td + td")for row in text.select("table tr + tr")] 
In [5]: print(len(rows)) 
125  
In [6]: for row in rows: 
    ...:   print(row.get_text()) 
    ...:  
Tokyo/Yokohama 
New York Metro 
Sao Paulo 
Seoul/Incheon 
Mexico City 
Osaka/Kobe/Kyoto 
Manila 
Mumbai 
Delhi 
Jakarta 
Lagos 
Kolkata 
Cairo 
Los Angeles 
Buenos Aires 
Rio de Janeiro 
Moscow 
Shanghai 
Karachi 
Paris 
Istanbul 
Nagoya 
Beijing 
Chicago 
London 
Shenzhen 
Essen/Düsseldorf 
Tehran 
Bogota 
Lima 
Bangkok 
Johannesburg/East Rand 
Chennai 
Taipei 
Baghdad 
Santiago 
Bangalore 
Hyderabad 
St Petersburg 
Philadelphia 
Lahore 
Kinshasa 
Miami 
Ho Chi Minh City 
Madrid 
Tianjin 
Kuala Lumpur 
Toronto 
Milan 
Shenyang 
Dallas/Fort Worth 
Boston 
Belo Horizonte 
Khartoum 
Riyadh 
Singapore 
Washington 
Detroit 
Barcelona 
Houston 
Athens 
Berlin 
Sydney 
Atlanta 
Guadalajara 
San Francisco/Oakland 
Montreal. 
Monterey 
Melbourne 
Ankara 
Recife 
Phoenix/Mesa 
Durban 
Porto Alegre 
Dalian 
Jeddah 
Seattle 
Cape Town 
San Diego 
Fortaleza 
Curitiba 
Rome 
Naples 
Minneapolis/St. Paul 
Tel Aviv 
Birmingham 
Frankfurt 
Lisbon 
Manchester 
San Juan 
Katowice 
Tashkent 
Fukuoka 
Baku/Sumqayit 
St. Louis 
Baltimore 
Sapporo 
Tampa/St. Petersburg 
Taichung 
Warsaw 
Denver 
Cologne/Bonn 
Hamburg 
Dubai 
Pretoria 
Vancouver 
Beirut 
Budapest 
Cleveland 
Pittsburgh 
Campinas 
Harare 
Brasilia 
Kuwait 
Munich 
Portland 
Brussels 
Vienna 
San Jose 
Damman 
Copenhagen 
Brisbane 
Riverside/San Bernardino 
Cincinnati 
Accra 
Смежные вопросы