【发布时间】:2020-01-20 13:39:50
【问题描述】:
我想使用 for/if 循环从下面的网站中提取数据。下面的代码使用 for/if 循环成功地从文章中提取数据,但我想更新它并使用循环提取公司、满意百分比和总体评分数据(始终相同)。
overall=[]
satisfied=[]
company=[]
arbeitsatmosphare = []
vorgesetztenverhalten = []
kollegenzusammenhalt= []
lurl='https://www.kununu.com/de/volkswagenconsulting/kommentare'
with requests.Session() as session:
session.headers = {
'x-requested-with': 'XMLHttpRequest'
}
page = 1
while True:
print(f"Processing page {page}..")
url = f'{lurl}/{page}'
print(url)
response = session.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.find_all('article')
print("Number of articles: " + str(len(articles)))
for article in articles:
for key in [{'label': 'Arbeitsatmosphäre', 'list': arbeitsatmosphare},
{'label': 'Vorgesetztenverhalten', 'list': vorgesetztenverhalten},
{'label': 'Kollegenzusammenhalt', 'list': kollegenzusammenhalt}]:
span = article.find('span', text=re.compile(key['label']))
#print(span)
if span and span.find_next('span'):
key['list'].append(span.find_next('span').text.strip())
else:
key['list'].append('N/A')
# THIS PART IS NOT WORKING
div = soup.find(class_="company-profile-container")
for key2 in [{'label2': 'company-name', 'list': company},
{'label2': 'review-recommend-value', 'list': satisfied},
{'label2': 'review-rating-value', 'list': overall}]:
span2 = div.find('span', text=re.compile(key2['label2']))
#print(span2)
if span2 and span2.find('span'):
key2['list'].append(span2.find('span').text.strip())
else:
key2['list'].append('N/A')
page += 1
pagination = soup.find_all('div', {'class': 'paginationControl'})
if not pagination:
break
#print(overall)
df = pd.DataFrame({'Arbeitsatmosphäre': arbeitsatmosphare,
'Vorgesetztenverhalten': vorgesetztenverhalten,
'Kollegenzusammenhalt': kollegenzusammenhalt,
'company': company,
'satisfied': satisfied,
'overall':overall
})
print(df)
我以上面的代码为例,但看起来我的部分不起作用。我找不到问题,你能帮忙吗?
【问题讨论】:
-
什么是“不工作”?您收到错误还是没有结果?
-
空列表,找不到span2
标签: python loops for-loop if-statement beautifulsoup