2017-10-01 11 views
9

私はamazon.comの製品に関連する画像をスクラップするためにScrapyを使用しています。どのように画像データを解析するのですか?scrapeで画像データをスクラブ

私は通常、XPathを使用します。しかし、サムネイル以外の画像のXPathを見つけることができませんでした。たとえば、これはタイトルの解析方法です。

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

項目へのリンクは次のとおりです。https://www.amazon.com/dp/B01N068GIX?psc=1

+0

ページにリンクを追加して、検索する要素を指定できますか? – CtheSky

+0

私はページのリンクを追加しました。 – PiccolMan

答えて

4

画像は、ページのソースに存在するのJavaScriptから抽出することができるように思えます。私はjs2xmlライブラリを使用して、JavaScriptのソースコードをXMLに変換しました(あなたはScrapinghubのblogpostについて詳しく知ることができます)。 XMLを使用してSelectorを作成し、通常の方法でデータを抽出することができます。あなたはそれをテストしたい場合は

# -*- 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 

、Amazonはユーザーエージェント文字列に基づいてScrapyをブロックするように見えるよう

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" 

のようにそれを実行します。この例のクモを見てみましょう。

1

私はscrapyを使用すると言うが、ここではbeautifulsoup、要求、およびurllibを使用したいもののバージョンがあることを知っています。また、このメソッドを使用してユーザーエージェントを設定する必要性を回避します。

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") 
関連する問題