簡體   English   中英

Web 使用 Scrapy 抓取

[英]Web Scraping using Scrapy

我正在抓取 Flipcart 網站,我想從網站上提取圖像 URL。 這是網站的鏈接

import scrapy
from ..items import FlipcartItem
class QuotesSpider(scrapy.Spider):
    name='quotes'
    start_urls=[
        'https://www.flipkart.com/clothing-and-accessories/topwear/pr?sid=clo%2Cash&otracker=categorytree&p%5B%5D=facets.ideal_for%255B%255D%3DMen'
        ]
    def parse(self,response):
        items=FlipcartItem()
        image_url=response.css('._2r_T1I img::attr(src)').extract()
        #product_page_url=response.css('').extract()
        items['image_url']=image_url
        #items['product_page']=title
        yield items

這是我編寫的代碼,在運行代碼時我得到了一個空列表。像 image_url ["","",""]。有人可以建議我哪里出錯了嗎?

該站點正在使用 javascript 加載 scrapy 無法訪問的圖像。 您需要使用selenium來提取圖像數據。 在這里,我使用 scrapy 選擇器通過 selenium 提取圖像數據。 如果您想遵循此urlZ3CD13A277FBC2FEA5EF64364BF854C8 ,您可以使用 scrapy 和 selenium。

from selenium import webdriver
from scrapy.selector import Selector
browser = webdriver.Firefox(executable_path='./geckodriver')
browser.get(url="https://www.flipkart.com/clothing-and-accessories/topwear/pr?sid=clo%2Cash&otracker=categorytree&p%5B%5D=facets.ideal_for%255B%255D%3DMen")

page = browser.page_source
image_data = Selector(text=page)
image_data = image_data.css('img._2r_T1I::attr(src)').extract()
# print(image_data.xpath('//div[@class="CXW8mj _21_khk"]/img/@src').get())

print(image_data)

如果您需要安裝 selenium,請按照此url 操作

您應該考慮更改此行:

image_url=response.css('._2r_T1I img::attr(src)').extract()

對此,

image_urls=response.css('img._2r_T1I').xpath('@src').getall()

此外,您應該知道,即使只有一個項目,您的“image_url”也將是一個數組,因為這就是 scrapy 返回的內容。 您可能希望遍歷結果並為每個結果創建一個新的FlipcartItem ,或者如果您只期望一個結果,您可能希望將其從列表中拉出。

我試過這樣做:

import scrapy
class QuotesSpider(scrapy.Spider):
    name='quotes'
    start_urls=[
        'https://www.flipkart.com/clothing-and-accessories/topwear/pr?sid=clo%2Cash&otracker=categorytree&p%5B%5D=facets.ideal_for%255B%255D%3DMen'
        ]
    def parse(self,response):
        raw_image_urls=response.css('img._2r_T1I').xpath('@src').getall()
        clean_image_urls=[]
        for img_url in raw_image_urls:
            clean_image_urls.append(response.urljoin(img_url))
        yield{
        'image_urls':clean_image_urls
        }

但是獲取主頁的URL。不是圖像url。

這是一個 Javascript 生成的內容站點。 使用“查看頁面源”可以看到圖片src是空的。 代碼沒有錯。 只需使用SeleniumScrapy Splash它們會為您加載所有 javascript,以便您可以抓取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM