Beautifulsoup 筛选 "find_all" 个结果,仅限于通过 Regex 的 .jpeg 文件
Beautifulsoup filter "find_all" results, limited to .jpeg file via Regex
我想从论坛上获取一些图片。 find_all 结果给了我最想要的东西,即 jpeg 文件。然而,它也给了我一些我不想要的 gif 文件。另一个问题是 gif 文件是附件,不是有效的 link,这会导致我保存文件时出现问题。
soup_imgs = soup.find(name='div', attrs={'class':'t_msgfont'}).find_all('img', alt="")
for i in soup_imgs:
src = i['src']
print(src)
我试图在我的 find_all 选择搜索中避免 gif 文件,但没用,jpeg 和 gif 文件都在同一部分。那我应该怎么做才能过滤我的结果呢?请帮帮我吧,老大。我对编码非常业余。玩 Python 只是我的一个爱好。
尝试以下我认为您可以缩短的内容。它使用以运算符 ($) 结尾来指定子 img 元素的 src 属性值以 .jpg 结尾(根据 OP 的评论,它实际上是 jpg,从 jpeg 编辑为 jpg)
srcs = [item['src'] for item in soup.select("div.t_msgfont img[alt=''][src$='.jpg']")]
看看缩短选择器(我不能不看到有问题的 HTML),你可能会像
srcs = [item['src'] for item in soup.select(".t_msgfont [alt=''][src$='.jpg']")]
甚至
srcs = [item['src'] for item in soup.select(".t_msgfont [src$='.jpg']")]
您可以通过常规过滤 expression.Please 参考以下内容 example.Hope 这有帮助。
import re
from bs4 import BeautifulSoup
data='''<html>
<body>
<h2>List of images</h2>
<div class="t_msgfont">
<img src="img_chania.jpeg" alt="" width="460" height="345">
<img src="wrongname.gif" alt="">
<img src="img_girl.jpeg" alt="" width="500" height="600">
</div>
</body>
</html>'''
soup=BeautifulSoup(data, "html.parser")
soup_imgs = soup.find('div', attrs={'class':'t_msgfont'}).find_all('img', alt="" ,src=re.compile(".jpeg"))
for i in soup_imgs:
src = i['src']
print(src)
我建议您使用requests-html来查找页面中的图片资源。
与 BeautifulSoup
+ requests
.
相比,它非常简单
这是执行此操作的代码。
from requests_html import HTMLSession
session = HTMLSession()
resp = session.get(url)
for i in resp.html.absolute_links:
if i.endswith('.jpeg'):
print(i)
我想从论坛上获取一些图片。 find_all 结果给了我最想要的东西,即 jpeg 文件。然而,它也给了我一些我不想要的 gif 文件。另一个问题是 gif 文件是附件,不是有效的 link,这会导致我保存文件时出现问题。
soup_imgs = soup.find(name='div', attrs={'class':'t_msgfont'}).find_all('img', alt="")
for i in soup_imgs:
src = i['src']
print(src)
我试图在我的 find_all 选择搜索中避免 gif 文件,但没用,jpeg 和 gif 文件都在同一部分。那我应该怎么做才能过滤我的结果呢?请帮帮我吧,老大。我对编码非常业余。玩 Python 只是我的一个爱好。
尝试以下我认为您可以缩短的内容。它使用以运算符 ($) 结尾来指定子 img 元素的 src 属性值以 .jpg 结尾(根据 OP 的评论,它实际上是 jpg,从 jpeg 编辑为 jpg)
srcs = [item['src'] for item in soup.select("div.t_msgfont img[alt=''][src$='.jpg']")]
看看缩短选择器(我不能不看到有问题的 HTML),你可能会像
srcs = [item['src'] for item in soup.select(".t_msgfont [alt=''][src$='.jpg']")]
甚至
srcs = [item['src'] for item in soup.select(".t_msgfont [src$='.jpg']")]
您可以通过常规过滤 expression.Please 参考以下内容 example.Hope 这有帮助。
import re
from bs4 import BeautifulSoup
data='''<html>
<body>
<h2>List of images</h2>
<div class="t_msgfont">
<img src="img_chania.jpeg" alt="" width="460" height="345">
<img src="wrongname.gif" alt="">
<img src="img_girl.jpeg" alt="" width="500" height="600">
</div>
</body>
</html>'''
soup=BeautifulSoup(data, "html.parser")
soup_imgs = soup.find('div', attrs={'class':'t_msgfont'}).find_all('img', alt="" ,src=re.compile(".jpeg"))
for i in soup_imgs:
src = i['src']
print(src)
我建议您使用requests-html来查找页面中的图片资源。
与 BeautifulSoup
+ requests
.
这是执行此操作的代码。
from requests_html import HTMLSession
session = HTMLSession()
resp = session.get(url)
for i in resp.html.absolute_links:
if i.endswith('.jpeg'):
print(i)