私はウェブサイトのリストからデータを収集するための小さなスクリプトを持っています。私はこれにlynx
を使用していますが、データを調べた後、一部のサイトが結果を返さないことに気付きました。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"
証明書検証の問題です。そして、明らかにlynx
には検証を無視するフラグがありません。検証は誰にとっても最高の関心事であると私は理解していますが、リスト内のすべてのWebサイトからデータを取得できる必要があります。
だから、代わりにPythonとBeautifulSoupを使ってみました。 this answerから私は単一のURLからリンクを引き出すことができます。そして、this answerから検証を無視してください。 Pythonの3.6を使用して
、これは私がこれまで持っているものです。
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'])
私は、URLのそれぞれからのリンクを引っ張ってPythonスクリプトをbashスクリプトでだ同じリストを渡したいのですがリスト内のだから、基本的に、このリスト
https://google.com/search?q=${1}
https://duckduckgo.com/?q=${1}
https://www.bing.com/search?q=${1}
のラインのそれぞれは、私はこれを行うにはどうすればよいresp = urllib.request.urlopen('URLS', context=ctx)
にURLS
として渡されますでしょうか?
正確に何をしたいですか?あなたはサイトのリストをどこに渡すのですか? – user3764893
私はbashスクリプトと同じ機能を得ようとしています。私はPythonを全く知らない。私が今日知ったことのほとんどは、今日学んだ。私は、bashスクリプトと同じリストを読むためにPythonスクリプトを取得しようとしています。 –
あなたのリストを繰り返し、リンクを開いて解析するループを作ることができます。それはうまくいかないでしょうか? – user3764893