Как очистить несколько страниц запросами в python - PullRequest
0 голосов
/ 07 августа 2020

недавно начал заниматься парсингом веб-страниц, и я справился нормально, но теперь я застрял, и я не могу найти ответ или понять его. Вот мой код для очистки и экспорта информации с одной страницы

import requests
page = requests.get("https://www.example.com/page.aspx?sign=1")

from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'html.parser')

#finds the right heading to grab
box = soup.find('h1').text
heading = box.split()[0]

#finds the right paragraph to grab
reading = soup.find_all('p')[0].text

print (heading, reading)

import csv
from datetime import datetime

# open a csv file with append, so old data will not be erased
with open('index.csv', 'a') as csv_file:
 writer = csv.writer(csv_file)
 writer.writerow([heading, reading, datetime.now()])

Проблема возникает, когда я пытаюсь очистить несколько страниц одновременно. Все они одинаковы, только изменения разбивки на страницы, например

Вместо того, чтобы писать один и тот же код 20 раз, как мне вставить все данные в кортеж или массив и экспортировать в CSV. Заранее большое спасибо.

1 Ответ

1 голос
/ 07 августа 2020

Просто попробуйте его с al oop, пока у вас не станет доступной страницы (запрос не в порядке). Должно быть легко получить.

import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime

results = []
page_number = 1

while True:
    response = requests.get(f"https://www.example.com/page.aspx?sign={page_number}")
    if response.status_code != 200:
        break
    soup = BeautifulSoup(page.content, 'html.parser')
    #finds the right heading to grab
    box = soup.find('h1').text
    heading = box.split()[0]
    #finds the right paragraph to grab
    reading = soup.find_all('p')[0].text
    # write a list
    # results.append([heading, reading, datetime.now()])
    # or tuple.. your call
    results.append((heading, reading, datetime.now()))
    page_number = page_number + 1

with open('index.csv', 'a') as csv_file:
 writer = csv.writer(csv_file)
 for result in results:
    writer.writerow(result)
...