2017-06-09 17 views
0

私はウェブサイトのリストからデータを収集するための小さなスクリプトを持っています。私はこれに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として渡されますでしょうか?

+0

正確に何をしたいですか?あなたはサイトのリストをどこに渡すのですか? – user3764893

+0

私はbashスクリプトと同じ機能を得ようとしています。私はPythonを全く知らない。私が今日知ったことのほとんどは、今日学んだ。私は、bashスクリプトと同じリストを読むためにPythonスクリプトを取得しようとしています。 –

+0

あなたのリストを繰り返し、リンクを開いて解析するループを作ることができます。それはうまくいかないでしょうか? – user3764893

答えて

1

Python文字列の書式設定を試してください。

'https://google.com/search?q=%s' % ('text',)は、それはあなたがサイト名を読む

+0

ありがとうございました。 –

1

探しているものだ場合は、要求を送信し、それらを反復処理し、リストから言うと応答を解析することができます、'https://google.com/search?q=text'が得られます。

site_list = ['http://example.com', 'https://google.com'] 

for site in site_list: 

    resp = urllib.request.urlopen(site) 
    soup = BeautifulSoup(resp, "lxml") 

    for link in soup.find_all('a', href=True): 
     print(link['href']) 
+0

ありがとう、これは役に立ちました。 –

関連する問題