Bei einem Fastapi -Web -Scraping -Dienst von einer Spring -Boot -Anwendung mit einem vorgetäuschten Client hängt die Anforderung bei Scrapersponse -Antwort = this.Scrapedate (); ohne Fehler zu werfen. Der Fastapi -Dienst startet den Schablonenvorgang neu, aber die Feder -Boot -Funktion geht nicht über den API -Aufruf hinaus. Das Problem tritt nur beim Schaben mehrerer Websites auf, während das Abkratzen einer einzelnen Website wie erwartet funktioniert.
Normalerweise dauert die Anforderung bis zu 1 Stunde, manchmal 2 Stunden. Startfunktion, die den Webcraping-Dienst aufruft: < /p>
Bei einem Fastapi -Web -Scraping -Dienst von einer Spring -Boot -Anwendung mit einem vorgetäuschten Client hängt die Anforderung bei Scrapersponse -Antwort = this.Scrapedate (); ohne Fehler zu werfen. Der Fastapi -Dienst startet den Schablonenvorgang neu, aber die Feder -Boot -Funktion geht nicht über den API -Aufruf hinaus. Das [url=viewtopic.php?t=11587]Problem[/url] tritt nur beim Schaben mehrerer Websites auf, während das Abkratzen einer einzelnen Website wie erwartet funktioniert. Normalerweise dauert die Anforderung bis zu 1 Stunde, manchmal 2 Stunden. Startfunktion, die den Webcraping-Dienst aufruft: < /p> [code]@Scheduled(cron = "0 40 16 * * ?")minutes) public void scrape() { log.info("Calling web scraping service..."); Instant start = Instant.now(); ScrapeResponse response = this.scrapeDate();
if (response == null) { log.error("Failed to scrape the web"); return; } List scrappedArticles = response.data().stream() .filter(this::isValidArticle) // Check if the article is valid .flatMap( article -> { boolean existsInResponse1 = response.data().stream().anyMatch(a -> a.title().equals(article.title())); if (existsInResponse1) { return Stream.of(this.buildArticle(article), this.buildArticle(article)); } else { return Stream.of(this.buildArticle(article)); } }) .toList(); articleRepository.saveAll(scrappedArticles); Instant end = Instant.now(); long durationInSeconds = end.getEpochSecond() - start.getEpochSecond(); long minutes = durationInSeconds / 60; long seconds = durationInSeconds % 60; log.info( "Web scraping completed in {} minutes and {} seconds, Scrapped articles: {}", minutes, seconds, scrappedArticles.size()); } < /code> Dies ist die vorliegende Konfigurationsdatei: < /p> @Configuration public class FeignClientConfig {
private final ObjectMapper objectMapper;
public FeignClientConfig(ObjectMapper objectMapper) { this.objectMapper = objectMapper; }
@Bean public Retryer feignRetryer() { return new Retryer.Default(100, 1000, 3); // Initial interval, max interval, max attempts }
@Bean public Request.Options options() { return new Request.Options( 180, TimeUnit.MINUTES, // connectTimeout in minutes (3 hours) 180, TimeUnit.MINUTES, // readTimeout in minutes (3 hours) true ); }
@Bean public Encoder feignEncoder() { return new JacksonEncoder(objectMapper); }
@Bean public Decoder feignDecoder() { return new JacksonDecoder(objectMapper); } } < /code> Und schließlich ist dies mein schneller API -Code: < /p> @app.post("/scrape/news") async def scrape_news_articles(): thematics_file_path = 'files/thematics.json'
thematics_data = load_items(thematics_file_path) thematics = [speciality.name['fr'] for speciality in thematics_data]
try: data = scrape_news_articles_function(thematics) except requests.exceptions.ReadTimeout: # Retry with base64 encoding encoded_thematics = base64.b64encode(str(thematics).encode('utf-8')).decode('utf-8') data = scrape_news_articles_function(encoded_thematics, base64_encoded=True) return {"data": data} < /code> def scrape_news_articles_function(thematics, base64_encoded=False): if base64_encoded: thematics = base64.b64decode(thematics).decode('utf-8')
Ich habe ein paar Websites mit V2 gebaut (klugte zusammen). Ich vermute, dass meine Sachen nicht mehr hauptsächlich aufgrund der jüngsten Änderungen von Keystore funktioniert (denke ich). Irgendwie...
Für .NET Generic Host Es ist möglich, mehrere Implementierungen derselben Serviceschnittstelle zu registrieren. Bei der Materialisierung dieses Dienstes wird der letzte hinzugefügte hinzugefügt (das...
Ich möchte versuchen, die Adressen aller Gebäudedaten an einem gezielten Ort abzukratzen ( e.g. mumbai ) Aus der Google -Karte mit Python?e.g. mumbai ) Durch die Programmierung? BR/>
Wenn Hilfe ich
Ich versuche, Excel -Daten zu kratzen, indem auf der folgenden Seite auf mehrere Dropdown -Datum und Auswahldaten klicken. Habe meinen Python -Code unten reproduziert. Der Weblink, den ich versuche...
Ich versuche, an einem Projekt zu arbeiten, und ich muss die Links von Google Image-Ergebnissen abrufen. from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains...