Теперь вы поняли, что такое количество статей. Более простого решения не существует. Там могут быть и другие версии, если вы хотите проверить.
Ваш код в упрощенной версии:
from urllib.request import urlopen
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url="http://ionnews.mu", headers=headers)
html = urllib.request.urlopen(req)
bsObj = BeautifulSoup(html, "html")
articles = bsObj.findAll("article", {"class": "post"})
for article in articles:
print(article.find("img").get("src"))
И есть эта версия, которая использует inline для l oop
from urllib.request import urlopen
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url="http://ionnews.mu", headers=headers)
html = urllib.request.urlopen(req)
bsObj = BeautifulSoup(html, "html")
images = [article.find("img").get("src") for article in bsObj.findAll("article", {"class": "post"})]
print(images)
Есть подход с lxml
, он не совсем хорош, но вы можете использовать его, чтобы легко находить элементы, если они находятся в каких-то странных местах, используя xpath
:
from urllib.request import urlopen
from lxml import etree
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url="http://ionnews.mu", headers=headers)
html = urllib.request.urlopen(req)
lxmlHtml = etree.HTMLParser()
htmlPage = etree.parse(html, lxmlHtml)
images = htmlPage.xpath("//article[contains(@class, 'post') and not(contains(@class, 'page'))]//img")
for image in images:
print(image.attrib["src"])