html - 我如何 webscrabe 图像链接选项卡
问题描述
我正在尝试对图像选项卡进行网络抓取,以便获得可以使用的链接,这样我就可以直接访问我正在制作的项目的图像。
问题是,每当我尝试编写 "print(soup.find('a' , class_ = 'q qs')) 时,如果没有,它就会给出输出
我遇到的另一个问题是视频和新闻标签等其他标签具有相同的标签但链接不同,那么我该如何区分两者?
图片链接的 HTML 我希望我可以在这里放一个屏幕截图,因为这很难理解。
图像标签
<div class="hdtb-mitem hdtb-imb" aria-selected="false" role="tab"><a class="q qs" href="/search?q=dogs&safe=active&client=safari&rls=en&source=lnms&tbm=isch&sa=X&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&safe=active&client=safari&rls=en&source=lnms&tbm=isch&sa=X&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&safe=active&client=safari&rls=en&source=lnms&tbm=vid&sa=X&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&safe=active&client=safari&rls=en&source=lnms&tbm=vid&sa=X&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>
您可以看到图像和视频选项卡的标签是相同的,我只有一个可以检索其中一个,我该怎么做呢,我只想要指向图像选项卡的链接而不是视频选项卡。
解决方案
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 List Comprehension 中使用过滤器,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')]
推荐阅读
- javascript - 包含加法和减法运算符的字符串,用于评估答案
- android - 如何从谷歌地图中删除特定的多个标记而不是单个或所有标记
- python - 想在 Ubuntu 中安装 Django
- ruby-on-rails - Rails 回调检查记录是否存在,否则返回 404
- c# - 自定义数据视图和内部数据网格资源问题
- reactjs - 在 React 中创建所需的组件属性
- python - 如何在我的 PyQt5 界面中显示 openslide.deepzoom.DeepZoomGenerator?
- asp.net-core - EF Core 只创建一个自引用外键而不是 2 个
- wordpress - 带有特殊字符的密码上的 wp-signon 错误
- ios - 如何将继承的协议转换为指定的类?