recherche

Maison  >  Questions et réponses  >  le corps du texte

Téléchargez un fichier CSV contenant les URL de la page HTML et utilisez Flask pour lire les URL que vous souhaitez explorer

J'ai actuellement besoin de créer un système Web capable de télécharger un fichier CSV contenant une liste d'URL. Après le téléchargement, le système lira l'URL ligne par ligne et sera utilisée pour la prochaine étape d'exploration. Ici, l'exploration nécessite de se connecter au site Web avant l'exploration. J'ai déjà le code source du site de connexion. Cependant, le problème est que je souhaite connecter une page HTML nommée "upload_page.html" avec un fichier flask nommé "upload_csv.py". Où le code source pour la connexion et le scraping doit-il être placé dans le fichier flask ?

upload_page.html

<div class="upload">
            <h2>Upload a CSV file</h2>
                <form action="/upload" method="post" enctype="multipart/form-data">
                 <input type="file" name="file" accept=".csv">
                 <br>
                 <br>
                 <button type="submit">Upload</button>
                </form>
</div>

upload_csv.py

from flask import Flask, request, render_template
import pandas as pd
import requests
from bs4 import BeautifulSoup
import csv
import json
import time
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('upload_page.html')

#Code for Login to the website


@app.route('/upload', methods=['POST'])
def upload():
    # Read the uploaded file
    csv_file = request.files['file']
    # Load the CSV data into a DataFrameSS
    df = pd.read_csv(csv_file)
    final_data = []
    # Loop over the rows in the DataFrame and scrape each link
    for index, row in df.iterrows():
        link = row['Link']
        response = requests.get(link)
        soup = BeautifulSoup(response.content, 'html.parser')
        start = time.time()
        # will be used in the while loop
        initialScroll = 0
        finalScroll = 1000

        while True:
            driver.execute_script(f"window.scrollTo({initialScroll},{finalScroll})")
            # this command scrolls the window starting from the pixel value stored in the initialScroll
            # variable to the pixel value stored at the finalScroll variable
            initialScroll = finalScroll
            finalScroll += 1000

            # we will stop the script for 3 seconds so that the data can load
            time.sleep(2)
            end = time.time()
            # We will scroll for 20 seconds.
            if round(end - start) > 20:
                break

        src = driver.page_source
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        # print(soup.prettify())

        #Code to do scrape the website

    return render_template('index.html', message='Scraped all data')


if __name__ == '__main__':
    app.run(debug=True)

Mon code de connexion et mon code de scraping sont-ils au bon endroit ? Cependant, l'encodage ne fonctionne pas et après avoir cliqué sur le bouton de téléchargement, il n'est pas traité

P粉799885311P粉799885311486 Il y a quelques jours587

répondre à tous(1)je répondrai

  • P粉207969787

    P粉2079697872023-09-08 00:06:27

    csv_file = request.files['file']
    # Load the CSV data into a DataFrame
    df = pd.read_csv(csv_file)
    final_data = []
    # Initialize the web driver
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-gpu")
    driver = webdriver.Chrome(options=chrome_options)
    # Loop over the rows in the DataFrame and scrape each link
    for index, row in df.iterrows():
        link = row['Link']
        # Login to the website
        # Replace this with your own login code
        driver.get("https://example.com/login")
        username_field = driver.find_element_by_name("username")
        password_field = driver.find_element_by_name("password")
        username_field.send_keys("myusername")
        password_field.send_keys("mypassword")
        password_field.send_keys(Keys.RETURN)
        # Wait for the login to complete
        WebDriverWait(driver, 10).until(EC.url_changes("https://example.com/login"))
        # Scrape the website
        driver.get(link)
        start = time.time()
        # will be used in the while loop
        initialScroll = 0
        finalScroll = 1000
    
        while True:
            driver.execute_script(f"window.scrollTo({initialScroll},{finalScroll})")
            # this command scrolls the window starting from the pixel value stored in the initialScroll
            # variable to the pixel value stored at the finalScroll variable
            initialScroll = finalScroll
            finalScroll += 1000
    
            # we will stop the script for 3 seconds so that the data can load
            time.sleep(2)
            end = time.time()
            # We will scroll for 20 seconds.
            if round(end - start) > 20:
                break

    répondre
    0
  • Annulerrépondre