2014-12-18 5 views
1

Я рассмотрел пару решений для этого в Python, включая lxml, BeautifulSoup и Scrapy.Python Scrape Images From CSS Class

URL-адрес является: https://uk.eurosport.yahoo.com/football/players/hugo-lloris/

<div class="player-image soccer-jersey" id="yui_3_16_0_1_1418920336731_663"> 
 
      
 
    <img src="https://s1.yimg.com/bt/api/res/1.2/tJcByeD1uUzpRu9blmsOZA-- /YXBwaWQ9eW5ld3M7Zmk9ZmlsbDtoPTE3MDtxPTc1O3c9MTgw/http://l.yimg.com/j/assets/i/us/sp/v/soccer/worldcup/players/374980.1.jpg" width="180" height="170" alt="H. Lloris" title="" class="photo" id="yui_3_16_0_1_1418920336731_664"> 
 

 
</div>

У нас есть Div класс "игрок-изображения футбольного-Джерси", затем IMG внутри, что, класс "фото".

Я хотел бы загрузить это изображение (NB: я продолжу и скачаю несколько). Я просмотрел как csselector, так и xpath (не всегда поддерживается, например, последний с BeautifulSoup) - но я просто не могу его загрузить, и в примерах я обнаружил, что люди обращаются к тегу img, чтобы получить URL href, что здесь не так.

+0

были любые ответы полезны для вас? это сообщество функционирует через двустороннюю обратную связь между айерами и ответчиками. вы должны выбрать или выбрать (щелкните зеленую проверку) любые ответы, которые сработали для вас. –

+0

@MagentaNova У меня нет репутации, но я нажал на бесцветный тик. Приветствия. – djdavies7

ответ

1

Я предполагаю, что у вас уже есть работающий питон среда со всеми необходимыми зависимостями, установленными для этого кода.

На интерфейсе командной строки, создать проект Scrapy:

scrapy startproject yuiImage 

Это создаст папку проекта yuiImage внутри текущего каталога.

Затем создайте файл yuiimage_spider.py внутри yuiImage/пауков папку, которая находится в папке проекта:

import re, scrapy 
from urllib import urlretrieve 

class YuiimageSpider(scrapy.Spider): 
    name = "yuiimage" 
    allowed_domains = ["yahoo.com"] 
    start_urls = [ 
     "https://uk.eurosport.yahoo.com/football/players/hugo-lloris/" 
    ] 

    def parse(self, response): 
     imageSrcs = response.xpath("//div[contains(@class, 'player-image') and contains(@class, 'soccer-jersey')]/img[@style and contains(@style, 'yimg.com') and contains(@class, 'photo')]/@style").extract() 
     for src in imageSrcs: 
      imgUrl = re.search('http\:.*', re.search('[^(].*\(\'(.*)\'\);', src).group(1)).group(0) 
      urlretrieve(imgUrl, imgUrl.split("/").pop()) 

Затем выполните следующую команду внутри папки проекта:

scrapy crawl yuiimage 

Для этого необходимо загрузить каждое изображение ng с указанными вами правилами внутри папки проекта.

Cheers.

+0

Это лучшее решение, потому что использование xpath делает вещи более гибкими, когда я хочу очистить другие изображения, которые вы логически предвидели, что я хочу делать. – djdavies7

0

Самый простой способ загрузить изображение - это метод urlretrieve от urllib. он принимает необязательный параметр имени файла, в котором вы можете указать путь и имя для загруженного файла (по умолчанию я считаю, что он автогенерирует имя и помещает его в текущий каталог).

для фрагмента кода HTML, вы можете сделать что-то вроде этого:

from bs4 import BeautifulSoup as BS 
from urllib import urlretrieve 

soup = BS(**the html you scraped**) 
imgTag = soup.find('img',id='yui_3_16_0_1_1418920336731_664') 
imgSrc = imgTag['src'] # in this case, the source is the full url 
# but in other cases it may be relative path, in which case you would append it 
# to the base url 
urlretrieve(imgSrc,filename=**path that you want to save the image to**) 
+0

Это работает, но не очень гибко. – djdavies7

+1

если я получу ваш смысл, @ djdavies7, он негибкий, потому что он рассматривает атрибут src как полный URL-адрес? вы можете использовать метод urljoin из url parse, с базовым url и src path в качестве двух аргументов, чтобы получить полный url для urlretrieve. –

+0

Вы работали над конкретным идентификатором, а не с классом CSS, который является одним и тем же во всех URL-адресах, поэтому получение следующего идентификатора (я сказал, что я бы очистил несколько) было бы хлопотно. Приветствия. – djdavies7