【问题标题】:beautifulsoup loop extract repeatingBeautifulsoup 循环提取重复
【发布时间】:2020-01-17 13:25:02
【问题描述】:

以下代码从大众汽车页面https://www.kununu.com/de/volkswagenconsulting/kommentare中提取数据

但是,我通过多次尝试/排除重复自己。我想创建一个新循环来提取arbeitsatmosphare = [], vorgesetztenverhalten = [], kollegenzusammenhalt= [] 中的数据,而无需重复代码。你能帮忙吗?

import requests
from bs4 import BeautifulSoup
import pandas as  pd
import re




city = []
team = []
date = []
jobstatus=[]
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')
        # satisfied.append(satisfiedText)
        # firma = [x.text.strip() for x in soup.find_all('span', {'class': 'company-name'})]
        articles = soup.find_all('article')
        print("Number of articles: " + str(len(articles)))
        for article in articles:

            try:
                arbeitsatmosphareText = article.find('span', text=re.compile(r'Arbeitsatmosphäre')).find_next(
                    'span').text.strip()
                arbeitsatmosphare.append(arbeitsatmosphareText)
            except:
                arbeitsatmosphare.append('N/A')

            try:
                vorgesetztenverhaltenText = article.find('span',
                                                         text=re.compile(r'Vorgesetztenverhalten')).find_next(
                    'span').text.strip()
                vorgesetztenverhalten.append(vorgesetztenverhaltenText)
            except:
                vorgesetztenverhalten.append('N/A')

            try:
                kollegenzusammenhaltText = article.find('span', text=re.compile(r'Kollegenzusammenhalt')).find_next(
                    'span').text.strip()
                kollegenzusammenhalt.append(kollegenzusammenhaltText)
            except:
                kollegenzusammenhalt.append('N/A')


            companyText = soup.find('span', {'class': 'company-name'}).text.strip()
            company.append(companyText)

            satisfiedText = soup.find('span', {'class': 'review-recommend-value'}).text.strip()
            satisfied.append(satisfiedText)

            overallText = soup.find('span', {'class': 'review-rating-value'}).text.strip()
            overall.append(overallText)

        page += 1
        pagination = soup.find_all('div', {'class': 'paginationControl'})
        if not pagination:
            break

    df = pd.DataFrame({'Arbeitsatmosphäre': arbeitsatmosphare,
                       'Vorgesetztenverhalten': vorgesetztenverhalten,
                       'Kollegenzusammenhalt': kollegenzusammenhalt,
                        'Overall': overall,
                       'company': company,
                       'satisfied': satisfied

                       })

print(df)

【问题讨论】:

    标签: python html loops for-loop beautifulsoup


    【解决方案1】:

    你能用一些条件替换你的try/except吗?

    类似这样的:

    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']))
        if span and span.find_next('span'):
            key['list'].append(span.find_next('span').text.strip())
        else:
            key['list'].append('N/A')
    

    我刚刚测试了这个sn-p,看来我的结果和你的代码一样

    【讨论】:

    • 它适用于第一个循环。你能不能也用“满意”“整体”和“公司”循环来更新代码?我尝试使用你的方法,但有错误
    • 我不明白你需要什么。只有一家公司,满意和全面的领域
    • 是的,但我想也使用循环将其填充到“列表”中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2016-10-21
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多