добавить код извлечения в цикл Beautifulsoup - PullRequest
1 голос
/ 12 января 2020

У меня есть код, который извлекает 2 ссылки из txt-файла, например

https://www.kununu.com/de/volkswagenconsulting/kommentare
https://www.kununu.com/de/volkswagennutzfahrzeuge/kommentare

Ниже код извлекает из этих ссылок данные arbeitsatmosphare и данные фирмы (код работает).

firma=[]

company=[]

arbeitsatmosphare = []

lineList2=[]

 with open((os.environ.get('mypath')+'/test.txt'), 'r') as file:

    lines = file.readlines()
    for line in lines:
        lineList2.append(line.strip('\n'))

print(lineList2)


    for lurl in lineList2:
    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:

                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:
                    firmaText = article.find('div', text=re.compile(r'Firma')).find_next('div').text.strip()
                    firma.append(firmaText)
                except:
                    firma.append('N/A')
                companyText = [x.text.strip() for x in soup.find_all('span', {'class': 'company-name'})]
                company.append(companyText)

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

    df = pd.DataFrame({'Arbeitsatmosphäre': arbeitsatmosphare,
                       'firma':firma
                       'company': company

                       })

    print(df)

Мне нужно включить информацию о компании в выходные данные. Например, «Фольксваген Нутцфарцойге». Данные компании находятся в заголовке страницы под черной полосой.

UPD Я обновил код, теперь он работает.

1 Ответ

1 голос
/ 12 января 2020

Попробуйте следующее (добавляйте название компании на каждой итерации):

firma=[]
company=[]
arbeitsatmosphare = []

lineList2=[]

 with open((os.environ.get('mypath')+'/test.txt'), 'r') as file:

    lines = file.readlines()
    for line in lines:
        lineList2.append(line.strip('\n'))

print(lineList2)


for lurl in lineList2:
    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:

                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:
                    firmaText = article.find('div', text=re.compile(r'Firma')).find_next('div').text.strip()
                    firma.append(firmaText)
                except:
                    firma.append('N/A')

            page += 1
            pagination = soup.find_all('div', {'class': 'paginationControl'})
            company.extend([soup.find('span', {'class': 'company-name'}).text.strip()]*len(articles))
            if not pagination:
                break

df = pd.DataFrame({'Arbeitsatmosphäre': arbeitsatmosphare,
               'firma':firma,
               'company': company
               })

print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...