我无意中发现了这篇关于使用BeautifulSoup进行抓取的优秀帖子,我决定承担起从互联网上抓取一些数据的任务来尝试。
我将使用flight Radar 24的飞行数据,并使用博客文章中描述的内容,尝试自动在页面中搜索飞行数据。
import requests
import bs4
root_url = 'http://www.flightradar24.com'
index_url = root_url + '/data/flights/tigerair-tgw/'
def get_flight_id_urls():
response = requests.get(index_url)
soup = bs4.BeautifulSoup(response.text)
return [a.attrs.get('href') for a in soup.select('div.list-group a[href^=/data]')]
flight_id_urls = get_flight_id_urls()
for flight_id_url in flight_id_urls:
temp_url = root_url + flight_id_url
response = requests.get(temp_url)
soup = bs4.BeautifulSoup(response.text)
try:
table = soup.find('table')
rows = table.find_all('tr')
for row in rows:
flight_data = {}
flight_data['title'] = soup.select('div#cntPagePreTitle h1')[0].get_text()
flight_data['tr'] = row #error here
print (flight_data)
except AttributeError as e:
raise ValueError("No valid table found")
飞行数据页的示例
我跌跌撞撞地找到了表,然后意识到我不知道如何横向遍历表属性来获取嵌入在每列中的数据。
任何一个善良的灵魂都有任何线索,甚至是入门教程,这样我就可以阅读如何提取数据。
附言:感谢米格尔·格林伯格的优秀教程
补充
try:
table = soup.find('table')
rows = table.find_all('tr')
heads = [i.text.strip() for i in table.select('thead th')]
for tr in table.select('tbody tr'):
flight_data = {}
flight_data['title'] = soup.select('div#cntPagePreTitle h1')[0].get_text()
flight_data['From'] = tr.select('td.From')
flight_data['To'] = tr.select('td.To')
print (flight_data)
except AttributeError as e:
raise ValueError("No valid table found")
我更改了代码的最后一部分以形成数据对象,但似乎无法获取数据。
最终编辑:
import requests
import bs4
root_url = 'http://www.flightradar24.com'
index_url = root_url + '/data/flights/tigerair-tgw/'
def get_flight_id_urls():
response = requests.get(index_url)
soup = bs4.BeautifulSoup(response.text)
return [a.attrs.get('href') for a in soup.select('div.list-group a[href^=/data]')]
flight_id_urls = get_flight_id_urls()
for flight_id_url in flight_id_urls:
temp_url = root_url + flight_id_url
response = requests.get(temp_url)
soup = bs4.BeautifulSoup(response.text)
try:
table = soup.find('table')
rows = table.find_all('tr')
for row in rows:
flight_data = {}
flight_data['flight_number'] = tr['data-flight-number']
flight_data['from'] = tr['data-name-from']
print (flight_data)
except AttributeError as e:
raise ValueError("No valid table found")
附言:感谢@amow的大力帮助:D
在html中以table
作为表开始。
heads = [i.text.strip() for i in table.select('thead th')]
for tr in table.select('tbody tr'):
datas = [i.text.strip() for i in tr.select('td')]
print dict(zip(heads, datas))
输出
{
u'STD': u'06:30',
u'Status': u'Scheduled',
u'ATD': u'-',
u'From': u'Singapore (SIN)',
u'STA': u'07:55',
u'\xa0': u'', #This is the last column and have no meaning
u'To': u'Penang (PEN)',
u'Aircraft': u'-',
u'Date': u'2015-04-19'
}
如果要获取tr标签中的数据。只是利用
tr['data-data'] tr['data-flight-number']
等等
问题内容: 我是Java的新手,我需要列出列表列表。我可以在python中做到这一点,因为列表的元素可以是列表,因此在嵌入式列表中将引用列表,并且将引用嵌入式列表的zeroeth元素。有什么简单的方法可以在Java中实现此行为? 问题答案: 所有其他答案在技术上都是正确的,但是恕我直言,如果您实施了粗略的列表列表,您将无法在正确的抽象级别上处理数据。例如,我很确定列表列表在您的业务领域中已经意味着
问题内容: 运行代码 退货 因此,每次在列表列表中每次更新元组(列表)的第一个参数,但第二个参数list [0]却没有更新。有人可以解释这里发生的事情并提出解决方法吗?我想输出 问题答案: 列表是可变类型-为了创建副本(而不只是传递相同的列表),您需要明确地这样做: 但是,已经是Python内置的名称-最好不要将该名称用作变量。这是一个不用作变量名并复制的版本: 请注意,我演示了两种不同的方法来复
问题内容: 如何合并列表列表? 进入 如果我可以在合并列表之前在每个项目的开头和结尾添加一个值(例如html标签),那就更好了。 即,最终结果将是: 问题答案: 要串联列表,可以使用 要添加HTML标签,您可以使用列表推导。
问题内容: 我有一个关于泛型的Java问题。我声明了一个通用列表: 然后以某种方法尝试实例化并将项目添加到该列表: 哪里只是类型的对象; 它不会编译。它说: List 不适用于参数(MyType) 任何想法? 问题答案: 您不能对extends进行“放置”。看一下泛型- 获取和放置规则 。
Clean,清理。把未跟踪的文件清理掉。 练习 1,在项目下面新建一个文件,名字是 demo.md。 touch demo.md 然后查看状态,会返回: On branch master Untracked files: (use "git add <file>..." to include in what will be committed) demo.md nothing a
被认为是清爽的色彩组合,通常包括淡而浅的蓝绿和它的搭档——红橙色——也是它的补色。蓝绿或是鸭绿(teal),色彩清新、舒爽,常常以纯色来描写游历与闲适。 清爽的色彩组合如果添以光彩,可散发出祥和、宁静的气息。 补色色彩组合 三次色色彩组合 单色色彩组合 14 61 12 60 60 28 92 59 61 60 60 16 64 11 62 59 27 91 62 57 60 62 60 10 5