BeautifulSoup для L oop извлекает только данные первой страницы - PullRequest
0 голосов
/ 08 января 2020

У меня есть текстовый файл с двумя URL-адресами

https://www.kununu.com/de/volkswagen/kommentare
https://www.kununu.com/de/audi/kommentare

Я хочу извлечь данные из всех страниц в этих URL-адресах с BeautifulSoup. Ниже код извлекает эти данные, но только для первой страницы. Я должен что-то упустить, вы можете обновить код так, чтобы он извлек из всех страниц?

firma = []

lineList2 = [line.rstrip('\n') for line in open(r"C:/myfolder/555.txt")]

print(lineList2)

for url in lineList2:
    with requests.Session() as session:
        session.headers = {
            'x-requested-with': 'XMLHttpRequest'
        }
        page = 1
        while True:
            print(f"Processing page {page}..")
            url = f'{url}/{page}'
            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:
                    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'})
            if not pagination:
                break

    df = pd.DataFrame({

        'Company': firma
    })
print(df)

1 Ответ

1 голос
/ 08 января 2020
from bs4 import BeautifulSoup
import requests
import pandas as pd

firma = []

lineList2=[]
with open('555.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("in while")
            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:
                    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'})
            if not pagination:
                break

    df = pd.DataFrame({

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