2017-10-01 43 views
9

Tôi đang sử dụng Scrapy để loại bỏ các hình ảnh liên quan đến một sản phẩm trên amazon.com. Làm cách nào để phân tích cú pháp dữ liệu hình ảnh?Xóa dữ liệu hình ảnh có hình ảnh thu nhỏ

Tôi thường sử dụng XPath. Tuy nhiên, tôi không thể định vị XPath cho hình ảnh (bên cạnh hình thu nhỏ). Ví dụ, đây là cách tôi phân tích tiêu đề.

title = response.xpath('//h1[@id="title"]/span/text()').extract() 

Các liên kết đến mục là: https://www.amazon.com/dp/B01N068GIX?psc=1

+0

bạn có thể thêm liên kết vào trang và chỉ định yếu tố bạn muốn xác định vị trí không? – CtheSky

+0

Tôi đã thêm liên kết cho trang. – PiccolMan

Trả lời

4

Có vẻ như những hình ảnh có thể được chiết xuất từ ​​JavaScript mà tìm thấy trong mã nguồn trang web. Tôi đã sử dụng thư viện js2xml để chuyển đổi mã nguồn JavaScript thành XML (bạn có thể tìm hiểu thêm về nó trên số blogpost của Scrapinghub). Sau đó, XML có thể được sử dụng để tạo một Selector mà bạn có thể trích xuất dữ liệu như bình thường. Hãy xem ví dụ nhện này:

# -*- coding: utf-8 -*-               
import js2xml                 
import scrapy                 

class ExampleSpider(scrapy.Spider):            
    name = 'example'                
    allowed_domains = ['amazon.com']            
    start_urls = ['https://www.amazon.com/dp/B01N068GIX?psc=1/']     

    def parse(self, response):             
     item = dict() 
     js = response.xpath("//script[contains(text(), 'register(\"ImageBlockATF\"')]/text()").extract_first() 
     xml = js2xml.parse(js)             
     selector = scrapy.Selector(root=xml)         
     item['image_urls'] = selector.xpath('//property[@name="colorImages"]//property[@name="hiRes"]/string/text()').extract() 
     yield item 

Nếu bạn muốn thử nghiệm nó ra, chạy nó như

scrapy runspider example.py -s USER_AGENT="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36" 

như Amazon dường như để chặn Scrapy dựa trên người dùng chuỗi đại lý.

1

Tôi biết câu hỏi được cho là sử dụng nhiều sự cố nhưng đây là phiên bản của những gì bạn muốn bằng cách sử dụng beautifulsoup, yêu cầu và urllib. Bạn cũng bỏ qua sự cần thiết phải thiết lập useragent bằng cách sử dụng phương pháp này.

from bs4 import BeautifulSoup as bsoup 
import requests 
from urllib import request 

def load_image(url): 
    resp1 = requests.get(url) 
    imgurl = _find_image_url(resp1.content) 
    resp2 = request.urlopen(imgurl) #treats url as file-like object 
    print(resp2.url) 
def _find_image_url(html_block): 
    soup = bsoup(html_block, "html5lib") 
    body = soup.find("body") 
    imgtag = soup.find("img", {"id":"landingImage"}) 
    imageurl = dict(imgtag.attrs)["src"] 
    return imageurl 


load_image("https://rads.stackoverflow.com/amzn/click/B01N068GIX") 
Các vấn đề liên quan