我不知道如果不抓住全表,因为mechanize
Python的beautifulsoup不敛全表
这工作:
from bs4 import BeautifulSoup
import requests
page = 'http://www.airchina.com.cn/www/jsp/airlines_operating_data/exlshow_en.jsp'
r = requests.get(page)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text)
div = soup.find('div', class_='mainRight').find_all('div')[1]
table = div.find('table', recursive=False)
for row in table.find_all('tr', recursive=False):
for cell in row('td', recursive=False):
print cell.text.split()
但这并不:
import mechanize
from bs4 import BeautifulSoup
import requests
URL='http://www.airchina.com.cn/www/jsp/airlines_operating_data/exlshow_en.jsp'
control_year=['2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014']
control_month=['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
br = mechanize.Browser()
r=br.open(URL)
br.select_form("exl")
control_m = br.form.find_control('month')
control_y = br.form.find_control('year')
br[control_m.name]=['06']
br[control_y.name]=['2012']
response = br.submit()
soup = BeautifulSoup(response,'html.parser')
#div = soup.find('div', class_='mainRight')
div = soup.find('div', class_='mainRight').find_all('div')[1]
table = div.find('table', recursive=False)
for row in table.find_all('tr', recursive=False):
for cell in row('td', recursive=False):
print cell.text.strip()
使用mechanize
只生产以下,即使在萤火虫我看到所有的tr
和td
Jun 2012
% change vs Jun 2011
% change vs May 2012
Cumulative Jun 2012
% cumulative change
很可能是它自动在表格中添加'tbody'元素。在'tr'之前循环遍历'table'中的所有'tbody'。 – Wolph
@沃尔夫。我试过'table.find_all('tbody')'但是返回'[]' – jason
我相信它可能与您正在使用的'html.parser'有关,请参阅我的答案 – Wolph