Python 3.x “美联过滤器”;查找“所有”;结果,通过正则表达式仅限于.jpeg文件

Python 3.x “美联过滤器”;查找“所有”;结果,通过正则表达式仅限于.jpeg文件,python-3.x,beautifulsoup,python-requests,jpeg,gif,Python 3.x,Beautifulsoup,Python Requests,Jpeg,Gif,我想从论坛上获取一些图片。find_all结果提供了我最想要的东西,即jpeg文件。然而,它也给了我一些我不想要的gif文件。另一个问题是gif文件是一个附件,不是有效的链接,在保存文件时会造成问题 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结果提供了我最想要的东西,即jpeg文件。然而,它也给了我一些我不想要的gif文件。另一个问题是gif文件是一个附件,不是有效的链接,在保存文件时会造成问题

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 selections搜索中使用gif文件,但没用,jpeg和gif文件都在同一部分。那我该怎么过滤我的结果呢?请给我一些帮助,头儿。我对编码相当业余。玩Python只是我的一个爱好

试试下面的方法,我想你可以缩短。它使用ends with运算符($)指定子img元素的src attributes值以.jpg结尾(根据OP的注释,它实际上是jpg,从jpeg编辑为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']")]

您可以通过正则表达式进行过滤。请参考以下示例。希望这对您有所帮助

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)
重新导入
从bs4导入BeautifulSoup
数据=“”
图像列表
'''
soup=BeautifulSoup(数据,“html.parser”)
soup_imgs=soup.find('div',attrs={'class':'t_msgfont'})。find_all('img',alt=”“,src=re.compile('jpeg'))
对于汤中的i\u imgs:
src=i['src']
打印(src)

我建议您使用查找页面中的图像资源。 与
BeautifulSoup
+
请求相比,它非常简单

下面是执行此操作的代码

from requests_html import HTMLSession
session = HTMLSession()
resp = session.get(url)
for i in resp.html.absolute_links:
    if i.endswith('.jpeg'):
        print(i)

您能否提供示例输出和附加代码(如果需要,请提供虚拟站点url)?另外,由于不知道详细信息,您是否尝试过使用简单的'if'条件进行筛选?是否需要导入任何内容才能使用“$”?似乎我的脚本一直在给我无效的语法。请立即尝试。我没有将内部“”更改为“怪异,它正在运行,但[src$='.jpeg']没有结果,我检查了文件扩展名,它们是jpg,当我去掉“e”时,语法错误…因此,对于汤中的项目,您可以使用srcs=[item['src']获得该错误。选择(“div.t_msgfont img[alt='][src$='.jpg'])尝试上述方法,并尝试srcs=[item['src']对于汤中的项目。选择(“.t_msgfont[src$='jpg']”)src=re.compile(“.jpeg”)完成它,强大!谢谢你,我很乐意帮助你,汉克头儿,我会调查的。作为业余爱好者,我有很多代码需要修改。
from requests_html import HTMLSession
session = HTMLSession()
resp = session.get(url)
for i in resp.html.absolute_links:
    if i.endswith('.jpeg'):
        print(i)