mgokg commited on
Commit
5f6bea3
·
verified ·
1 Parent(s): 04f7cb6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -27
app.py CHANGED
@@ -5,32 +5,57 @@ from urllib.parse import urljoin
5
 
6
  def parse_links_and_content(ort):
7
  base_url = "https://vereine-in-deutschland.net"
8
- # Konstruiere die vollständige URL
9
- url = f"{base_url}/vereine/Bayern/{ort}"
10
 
11
- try:
12
- # Senden der Anfrage an die URL
13
- response = requests.get(url)
14
- response.raise_for_status() # Überprüfen, ob die Anfrage erfolgreich war
 
15
 
16
- # Parse the HTML content using BeautifulSoup
17
- soup = BeautifulSoup(response.content, 'html.parser')
18
-
19
- # Finde das Element mit dem CSS-Selektor
20
- target_div = soup.select_one('div.row-cols-1:nth-child(4)')
21
-
22
- if target_div:
23
- # Extrahiere alle Links aus dem Element und füge die Base URL hinzu
24
- links = [urljoin(base_url, a['href']) for a in target_div.find_all('a', href=True)]
25
 
26
- # Extrahiere den HTML-Code des Elements
27
- html_code = str(target_div)
28
 
29
- return html_code, links
30
- else:
31
- return "Target div not found", []
32
- except Exception as e:
33
- return str(e), []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
  def scrape_links(links):
36
  results = []
@@ -57,20 +82,19 @@ with gr.Blocks() as demo:
57
  gr.Markdown("# Vereine in Bayern Parser")
58
 
59
  ort_input = gr.Textbox(label="Ort", placeholder="Gib den Namen des Ortes ein")
60
- html_output = gr.Code(label="HTML-Code des Elements", language="html")
61
  links_output = gr.JSON(label="Gefundene Links")
62
  content_output = gr.JSON(label="Inhalt der Links")
63
 
64
  def process_ort(ort):
65
- html_code, links = parse_links_and_content(ort)
66
- scraped_content = scrape_links(links)
67
- return html_code, links, scraped_content
68
 
69
  # Button zum Starten der Parsung
70
  button = gr.Button("Parse und Scrape")
71
 
72
  # Verbinde den Button mit der Funktion
73
- button.click(fn=process_ort, inputs=ort_input, outputs=[html_output, links_output, content_output])
74
 
75
  # Starte die Gradio-Anwendung
76
  demo.launch()
 
5
 
6
  def parse_links_and_content(ort):
7
  base_url = "https://vereine-in-deutschland.net"
8
+ all_links = []
 
9
 
10
+ # Start with the first page
11
+ page_number = 1
12
+ while True:
13
+ # Konstruiere die vollständige URL für die aktuelle Seite
14
+ url = f"{base_url}/vereine/Bayern/{ort}/p/{page_number}"
15
 
16
+ try:
17
+ # Senden der Anfrage an die URL
18
+ response = requests.get(url)
19
+ response.raise_for_status() # Überprüfen, ob die Anfrage erfolgreich war
 
 
 
 
 
20
 
21
+ # Parse the HTML content using BeautifulSoup
22
+ soup = BeautifulSoup(response.content, 'html.parser')
23
 
24
+ # Finde den Link mit dem CSS-Selektor für die nächste Seite
25
+ link_element = soup.select_one('li.page-item:nth-child(8) > a:nth-child(1)')
26
+
27
+ if link_element and 'href' in link_element.attrs:
28
+ href = link_element['href']
29
+ # Extrahiere die letzten beiden Zeichen der URL
30
+ last_two_chars = href[-2:]
31
+
32
+ # Konvertiere die letzten beiden Zeichen in einen Integer
33
+ last_two_chars_int = int(last_two_chars)
34
+
35
+ # Wenn die aktuelle Seite die letzte Seite ist, breche die Schleife ab
36
+ if page_number >= last_two_chars_int:
37
+ break
38
+ else:
39
+ # Wenn kein Link zur nächsten Seite gefunden wird, breche die Schleife ab
40
+ break
41
+
42
+ # Finde das Element mit dem CSS-Selektor
43
+ target_div = soup.select_one('div.row-cols-1:nth-child(4)')
44
+
45
+ if target_div:
46
+ # Extrahiere alle Links aus dem Element und füge die Base URL hinzu
47
+ links = [urljoin(base_url, a['href']) for a in target_div.find_all('a', href=True)]
48
+ all_links.extend(links)
49
+ else:
50
+ print(f"Target div not found on page {page_number}")
51
+
52
+ # Gehe zur nächsten Seite
53
+ page_number += 1
54
+ except Exception as e:
55
+ print(f"Error on page {page_number}: {str(e)}")
56
+ break
57
+
58
+ return all_links
59
 
60
  def scrape_links(links):
61
  results = []
 
82
  gr.Markdown("# Vereine in Bayern Parser")
83
 
84
  ort_input = gr.Textbox(label="Ort", placeholder="Gib den Namen des Ortes ein")
 
85
  links_output = gr.JSON(label="Gefundene Links")
86
  content_output = gr.JSON(label="Inhalt der Links")
87
 
88
  def process_ort(ort):
89
+ all_links = parse_links_and_content(ort)
90
+ scraped_content = scrape_links(all_links)
91
+ return all_links, scraped_content
92
 
93
  # Button zum Starten der Parsung
94
  button = gr.Button("Parse und Scrape")
95
 
96
  # Verbinde den Button mit der Funktion
97
+ button.click(fn=process_ort, inputs=ort_input, outputs=[links_output, content_output])
98
 
99
  # Starte die Gradio-Anwendung
100
  demo.launch()