首页 > 解决方案 > 在循环中使用 BeautifulSoup 的输出作为输入

问题描述

我正在学习 python 从这个特定的游戏网站上抓取数据。在这个社区的帮助下,我得到了大部分问题的解决方案。我正在尝试从航空公司管理游戏网站上抓取数据,该网站显示机场之间的距离、跑道长度、乘客需求等。这是我的代码

import requests
from bs4 import BeautifulSoup

data = {'lEmail': '<myEmailid>',
        'lPass': '<Password>',
        'fbSig': 'web'}

login_url = 'https://www.airline4.net/weblogin/login.php'
url = 'https://www.airline4.net/research_main.php?mode=search&rwy=1000&dist=19210&depId=600&arr=0&arrId=0&fbSig=false'

with requests.session() as s:
    s.post(login_url, data=data).text

    # now you are logged in, just print some information:
    distance = 19210
    departure_id = 600
    while distance != 'stop':
        url = 'https://www.airline4.net/research_main.php?mode=search&rwy=1000&dist=' + str(distance) + '&depId=' + str(departure_id) + '&arr=0&arrId=0&fbSig=false'
        soup = BeautifulSoup(s.get(url).content, 'html.parser')
        print(soup.get_text(strip=True, separator='\n'))
  
        distance = input()

在这里,我手动输入变量distance并在我的 url 中使用它。我得到的输出是:

C:\Users\Administrator\PycharmProjects\Project1\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/Project1/Airline3.py
Distance
Y class
J class
F class
Rwy
EHBK
-
NZCI
Netherlands, Maastricht
-
New Zealand, Waitangi
19,208 km
4,462ft rwy
Market:
71%
Y class
211
J class
94
F class
76
EHBK
-
NZDN
Netherlands, Maastricht
-
New Zealand, Dunedin
18,743 km
6,234ft rwy
Market:
38%
Y class
180
J class
122
F class
74
EHBK
-
NZOU
Netherlands, Maastricht
-
New Zealand, Oamaru
18,740 km
4,210ft rwy
Market:
39%
Y class
103
J class
137
F class
44
EHBK
-
NZCH
Netherlands, Maastricht
-
New Zealand, Christchurch
18,722 km
10,787ft rwy
Market:
81%
Y class
253
J class
62
F class
81
EHBK
-
NZTU
Netherlands, Maastricht
-
New Zealand, Timaru
18,704 km
4,200ft rwy
Market:
35%
Y class
289
J class
92
F class
29

在这个结果中,有没有办法将它18,704 km用作我的循环的输入(应该自动选择,无需我的干预)?

标签: python-3.xbeautifulsoup

解决方案


您必须使用该函数来获取具有适当属性findAll的所有应答器的列表(参见下面的代码)。div这样,您可以循环通过每个机场。

这样,您就可以查找您正在搜索的精确元素,然后计算您选择的出口。

代码需要定制,但这是一个很好的起点。

distance = 19210
departure_id = 600
table = soup.findAll('div', attrs={'class': 'row border opa sorter'})
for apt in table:
    apt_detail = apt.findAll('div')
    for elem in apt_detail:
        print(elem.text.split('\n'))

输出:

['', '', '', '     EHBK', '    ', '    -', '    ', '     NZCI', '    ', '', '', '    Netherlands, Maastricht', '   ', '   -', '   ', '    New Zealand, Waitangi', '   ', '', '']
['', '', '     EHBK', '    ', '    -', '    ', '     NZCI', '    ', '']
['', '', '', '     19,208 km', '    ', '', '    4,462ft rwy', '   ', '   Market:', '   ', '    71%', '   ', '']
['', '', '     19,208 km', '    ', '', '    4,462ft rwy', '   ']
...

推荐阅读