J'essaie d'utiliser une belle soupe pour saisir le code HTML d'un site Web. Au lieu de saisir le href et de cliquer sur "page suivante", je voudrais que la belle soupe n'accède qu'à une page à la fois. Donc, si l'url d'une page est:

www.website.com/p1

et mon code pour récupérer le code HTML de la page 2 est:

from bs4 import BeautifulSoup
from requests import get
import pandas as pd
import itertools
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

headers = {
   }

website = "https://www.website.com/this/that/p2"
response = get(website, headers=headers)
print(response)
html_soup = BeautifulSoup(response.text, 'html.parser')

house_containers = html_soup.find_all('div', class_="search-result-content")

Je voudrais créer de nouvelles URL basées sur l'original dans le format suivant:

count = 2
url = "https://www.website.com/this/that/p"
while count < 65:
    print(url + str(count))
    count += 1

puis exécutez le même processus pour chaque URL créée, en ajoutant le résultat à house_containers ou en créant une nouvelle variable dans chaque itération telle que house_containers_page / n

Si possible, je voudrais également ajouter des temps de sommeil entre chaque itération (pour éviter les captchas et autres).

Comment puis-je à l'intérieur d'une belle soupe à l'intérieur de la boucle while et ajouter les résultats aux house_containers?

0
Brunna T. 4 nov. 2019 à 07:36

1 réponse

house_containers se comporte comme une liste normale afin que vous puissiez créer une liste vide au début et ensuite l'étendre avec une nouvelle liste à partir de house_containers.

Vous pouvez commencer même avec count = 1

url = "https://www.website.com/this/that/p"

houses = [] 

for page in range(1, 65):
    webpage = url + str(page)
    response = get(website, headers=headers)

    html_soup = BeautifulSoup(response.text, 'html.parser')
    house_containers = html_soup.find_all('div', class_="search-result-content")

    houses.extend(house_containers)
0
furas 4 nov. 2019 à 05:09