2017-05-19 1 views
0

Ich würde gerne jede Instanz von img src = "([^"] +) "vor dem div class =" grid "und div class =" ordereplacebut "in irgendeinem HTML-Code finden, dh ich möchte finde alle Bilder im div-Container namens "grid".Python - Wie benutze ich Feller Regex?

Wenn ich findall verwende, wird nur ein Bild zurückgegeben, da div class = "grid" nur einmal auf der Webseite erscheint und daher nur eines der folgenden Ergebnisse liefert image URLs (macht Sinn) Also würde ich gerne den findall regex so iterieren, dass er wieder läuft und die zweite Instanz der image URL zurückgibt, und dann die dritte usw. Ist das mit finderiter möglich, und wie würde ich das tun Verwenden Sie es in den Code?

Der folgende Code ist mein Fund Regex, dass nur die eine U zurückgibt RL.

from urllib import urlopen 
from re import findall 
import re 

dennisov_url = 'https://denissov.ru/en/' 
dennisov_html = urlopen(dennisov_url).read() 

# Print all images between div class="grid" and div class="orderplacebut" 
# Because the regex spans over several lines, use DOTALL flag to include 
# every character between, including new lines 

watch_image_urls = findall('<div class="grid".*<img src="([^"]+)".*<div class="orderplacebut"', dennisov_html, flags=re.DOTALL) 
print watch_image_urls 

Antwort

0

Wirklich, verwenden Sie einen anderen Ansatz mit einem Parser (nicht wegen des .ru Domäne getestet, die hier blockiert ist):

import requests 
from bs4 import BeautifulSoup 

dennisov_url = 'https://denissov.ru/en/' 
dennisov_html = requests.get(dennisov_url) 
soup = BeautifulSoup(dennisov_html.text, 'lxml') 

images = soup.select('div.grid > img')