Ich habe ein kleines Skript zum Sammeln von Daten aus einer Liste von Websites. Ich habe lynx
dafür verwendet, aber nachdem ich die Daten durchgegangen bin, bemerkte ich, dass einige Seiten keine Ergebnisse zurückgaben.Ziehen von Daten aus einer Liste von Websites mit BeautifulSoup
#!/bin/bash
[ "$1" ] || exit 1
tmp=$(mktemp "${1}_XXXXXXXXX")
cat <<EOF > "$tmp"
https://google.com/search?q=${1}
https://duckduckgo.com/?q=${1}
https://www.bing.com/search?q=${1}
EOF
while read; do
lynx -nonumbers -dump -hiddenlinks=merge -listonly "$REPLY" | \
grep -i "${1}" | awk '!x[$0]++' >> file.txt
done < "$tmp"
rm "$tmp"
Es stellt sich heraus, es ist ein Zertifikat Validierungsproblem. Und anscheinend lynx
hat kein Flag, um die Validierung zu ignorieren. Obwohl ich weiß, dass Validierung das allerbeste Interesse ist, muss ich in der Lage sein, Daten von jeder Website in meiner Liste zu ziehen.
Also habe ich stattdessen mit Python und BeautifulSoup untersucht. Von this answer Ich bin in der Lage, die Links von einer einzigen URL zu ziehen. Und von this answer Validierung ignorieren.
Python 3.6, das ist, was ich bisher habe:
from bs4 import BeautifulSoup
import urllib.request
import ssl
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
resp = urllib.request.urlopen('https://google.com', context=ctx)
soup = BeautifulSoup(resp, "lxml")
for link in soup.find_all('a', href=True):
print(link['href'])
Ich mag die gleiche Liste zu übergeben, die an den Python-Skript in dem Bash-Skript ist die Links von jedem des URLs zu ziehen In der Liste. So im Wesentlichen, die jeweils Zeile dieser Liste
https://google.com/search?q=${1}
https://duckduckgo.com/?q=${1}
https://www.bing.com/search?q=${1}
würde als URLS
-resp = urllib.request.urlopen('URLS', context=ctx)
geben bekommen
Wie kann ich das tun?
Was genau möchten Sie tun? Wo gibst du die Liste der Seiten weiter? – user3764893
Ich versuche, die gleiche Funktionalität wie das Bash-Skript zu bekommen. Ich kenne Python überhaupt nicht. Das meiste von dem, was ich weiß, habe ich heute gelernt. Ich versuche, das Python-Skript die gleiche Liste wie das Bash-Skript zu lesen. –
Sie können eine Schleife verwenden, die durch Ihre Liste iteriert, den Link öffnet und analysiert. Würde das nicht funktionieren? – user3764893