0

作成中のプロジェクトの画像に直接アクセスできるように、使用できるリンクを取得できるように、画像タブを webscrape しようとしています。

問題は、 "print(soup.find('a' , class_ = 'q qs')) を書き込もうとするたびに、何も出力されない場合に出力が得られることです。

私が遭遇するもう 1 つの問題は、[ビデオ] タブや [ニュース] タブなどの他のタブには同じタグがありますが、リンクが異なるということです。

画像用の HTML リンク わかりにくいので、ここにスクリーンショットを載せたいと思います。

画像タブタグ

<div class="hdtb-mitem hdtb-imb" aria-selected="false" role="tab"><a class="q qs" href="/search?q=dogs&amp;safe=active&amp;client=safari&amp;rls=en&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ved=0ahUKEwiqhrOi06zkAhVFVRUIHeBbATwQ_AUIESgB"><span class="HF9Klc ZYMsjf" style="height:16px;width:16px"><svg focusable="false" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"></path><path d="M14 13l4 5H6l4-4 1.79 1.78L14 13zm-6.01-2.99A2 2 0 0 0 8 6a2 2 0 0 0-.01 4.01zM22 5v14a3 3 0 0 1-3 2.99H5c-1.64 0-3-1.36-3-3V5c0-1.64 1.36-3 3-3h14c1.65 0 3 1.36 3 3zm-2.01 0a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h7v-.01h7a1 1 0 0 0 1-1V5z"></path></svg></span>Images</a></div>

画像リンクの HTML

<a class="q qs" href="/search?q=dogs&amp;safe=active&amp;client=safari&amp;rls=en&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ved=0ahUKEwiqhrOi06zkAhVFVRUIHeBbATwQ_AUIESgB"><span class="HF9Klc ZYMsjf" style="height:16px;width:16px"><svg focusable="false" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"></path><path d="M14 13l4 5H6l4-4 1.79 1.78L14 13zm-6.01-2.99A2 2 0 0 0 8 6a2 2 0 0 0-.01 4.01zM22 5v14a3 3 0 0 1-3 2.99H5c-1.64 0-3-1.36-3-3V5c0-1.64 1.36-3 3-3h14c1.65 0 3 1.36 3 3zm-2.01 0a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h7v-.01h7a1 1 0 0 0 1-1V5z"></path></svg></span>Images</a>

ビデオタブタグ

<div class="hdtb-mitem hdtb-imb" aria-selected="false" role="tab"><a class="q qs" href="/search?q=dogs&amp;safe=active&amp;client=safari&amp;rls=en&amp;source=lnms&amp;tbm=vid&amp;sa=X&amp;ved=0ahUKEwiqhrOi06zkAhVFVRUIHeBbATwQ_AUIEigC"><span class="HF9Klc ZYMsjf" style="height:16px;width:16px"><svg focusable="false" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M0 0h24v24H0z" fill="none"></path><path clip-rule="evenodd" d="M10 16.5l6-4.5-6-4.5v9zM5 20h14a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1zm14.5 2H5a3 3 0 0 1-3-3V4.4A2.4 2.4 0 0 1 4.4 2h15.2A2.4 2.4 0 0 1 22 4.4v15.1a2.5 2.5 0 0 1-2.5 2.5z" fill-rule="evenodd"></path></svg></span>Videos</a></div>

動画リンクの HTML

<a class="q qs" href="/search? q=dogs&amp;safe=active&amp;client=safari&amp;rls=en&amp;source=lnms&amp;tbm=vid&amp;sa=X&amp;ved=0ahUKEwiqhrOi06zkAhVFVRUIHeBbATwQ_AUIEigC"><span class="HF9Klc ZYMsjf" style="height:16px;width:16px"><svg focusable="false" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M0 0h24v24H0z" fill="none"></path><path clip-rule="evenodd" d="M10 16.5l6-4.5-6-4.5v9zM5 20h14a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1zm14.5 2H5a3 3 0 0 1-3-3V4.4A2.4 2.4 0 0 1 4.4 2h15.2A2.4 2.4 0 0 1 22 4.4v15.1a2.5 2.5 0 0 1-2.5 2.5z" fill-rule="evenodd"></path></svg></span>Videos</a>

画像タブと動画タブのタグが同じで、そのうちの 1 つを取得するのは 1 つだけであることがわかります。どうすればよいでしょうか。動画タブではなく、画像タブへのリンクのみが必要です。

4

1 に答える 1

0

すべてのリンクtbm=vidが動画リンクとtbm=isch画像リンクに存在することを確認できます。
Python List Comprehension を使用してページからすべてのリンクをスクレイピングし、フィルターを使用して必要なデータを取得できます。

img_tag = [i for i in soup.find_all('a')] 

このコードはすべてのaリンクを返します。

img_tag = [i for i in soup.find_all('a') if 'tbm=isch' in i.get('href')] 

ここでは、Python リスト内包表記でフィルターを使用しています。if 'tbm=isch' in i.get('href')このコードlistは、画像リンクのみを返します。

とにかくあなたのための作業コード

from bs4 import BeautifulSoup 
img_tag = [i for i in soup.find_all('a') if 'tbm=isch' in i.get('href')] 
于 2019-08-31T19:08:17.700 に答える