我正在构建一个代码,该代码将从航空公司评论网站检索所有评论标题。我使用 5 个不同的 URL,因为我想比较 5 家不同航空公司的名称。但是,我的代码仅列出最后列出的 URL(针对阿拉斯加航空公司)的评论标题。我最初创建了一个包含所有 URL 的列表,但它具有完全相同的错误,仅显示阿拉斯加航空的结果。
我的代码:
# Insert the following command into the command prompt before starting for faster run time:
# jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
#Importing and installing necessary packages
!pip install lxml
from bs4 import BeautifulSoup
import requests
import pandas as pd
from pprint import pprint;
base_url = 'https://www.airlinequality.com/airline-reviews/'
ending = ['american-airlines', 'delta-air-lines', 'united-airlines',
'southwest-airlines', 'alaska-airlines']
for ending in endings:
url = base_url + ending
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
results = soup.find('div', id='container')
# Retrieving all reviews
titles = results.find_all('h2', class_='text_header')
for title in titles:
print(title, end="\n"*2)
我的输出:
“一流的客户服务” “非常不满意” “一切都太棒了” “乱七八糟的航空公司” “代理人显然非常关心” “沟通非常缺乏” “从未遇到过更粗鲁的门卫” “我们的托运行李严重损坏” “永远不要再预订阿拉斯加航空” “我没能上飞机” 全球最佳航空公司 最好的机场工作人员 最清洁的航空公司 阿拉斯加航空照片我预计会得到此输出,但对于所有 5 个 URL。如何从所有 URL 检索评论标题?
您将在每个循环中覆盖结果 - 将结果存储在列表中或直接抓取所需的信息。示例将它们存储在字典列表中,您可以简单地将它们转换为数据框:
import requests
import pandas as pd
base_url = 'https://www.airlinequality.com/airline-reviews/'
endings = ['american-airlines', 'delta-air-lines', 'united-airlines',
'southwest-airlines', 'alaska-airlines']
data = []
for ending in endings:
url = base_url + ending
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
for e in soup.select('article[itemprop="review"]'):
data.append({
'title': e.h2.text,
'rating':e.select_one('span[itemprop="ratingValue"]').text
})
pd.DataFrame(data)