gpt4 book ai didi

javascript - Scrapy Scraper 无法正确抓取图像

转载 作者:行者123 更新时间:2023-11-30 16:46:21 25 4
gpt4 key购买 nike

我正在尝试使用 Scrapy 来抓取该网站。

首先这是我的代码-:

from twisted.internet import reactor
from scrapy.crawler import CrawlerProcess, CrawlerRunner
import scrapy
#from scrapy import log, signals
from scrapy.utils.log import configure_logging
#from dmoz.spiders.dmoz_spiders import DmozSpider
#from dmoz.spiders.bigbasketspider import BBSpider
from scrapy.utils.project import get_project_settings
from scrapy.settings import Settings
import datetime
from multiprocessing import Process, Queue
import os
from scrapy.http import Request
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
from scrapy.signalmanager import SignalManager

#query=raw_input("Enter a product to search for= ")
query='table'
query1=query.replace(" ", "+")


class DmozItem(scrapy.Item):

productname = scrapy.Field()
product_link = scrapy.Field()
current_price = scrapy.Field()
mrp = scrapy.Field()
offer = scrapy.Field()
imageurl = scrapy.Field()
outofstock_status = scrapy.Field()

class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["http://www.pepperfry.com"]




def start_requests(self):

task_urls = [
]
i=1
for i in range(1,11):
temp = "http://www.pepperfry.com/site_product/search?is_search=true&p="+str(i)+"&q="+query1
task_urls.append(temp)
#raw_input()
i=i+1

start_urls = (task_urls)
p=len(task_urls)
return [ Request(url = start_url) for start_url in start_urls ]


def parse(self, response):
print response
items = []
for sel in response.xpath('//html/body/div[2]/div[2]/div[2]/div[4]/div'):
item = DmozItem()
item['productname'] = str(sel.xpath('div[1]/a/img/@alt').extract())[3:-2]
item['product_link'] = str(sel.xpath('div[2]/a/@href').extract())[3:-2]
item['current_price']=str(sel.xpath('div[3]/div/span[2]/span/text()').extract())[3:-2]

try:
temp1=sel.xpath('div[3]/div/span[1]/p/span')
item['mrp'] = str(temp1.xpath('text()').extract())[3:-2]

except:
item['mrp'] = item['current_price']

item['offer'] = 'No additional offer available'

item['imageurl'] = str(sel.xpath('div[1]/a//img/@src').extract())[3:-2]
item['outofstock_status'] = 'In Stock'
items.append(item)


print (items)

#print '\n'

spider1 = DmozSpider()
settings = Settings()
settings.set("PROJECT", {"dmoz"})
settings.set("CONCURRENT_REQUESTS" , 100)
settings.set( "DEPTH_PRIORITY" , 1)
settings.set("SCHEDULER_DISK_QUEUE" , "scrapy.squeues.PickleFifoDiskQueue")
settings.set( "SCHEDULER_MEMORY_QUEUE" , "scrapy.squeues.FifoMemoryQueue")
crawler = CrawlerProcess(settings)
crawler.crawl(spider1)
crawler.start()

该网站使用 XHR 加载产品,我已经正确理解了这一点(您可以在我的代码中的 start_urls 数组中注意到 XHR URL),并且它正在运行。下一个问题是该网站也使用 AJAX/Javascript 加载图像(我不确定该网站使用的是哪一个)。所以,如果你清楚地执行我的脚本(我的代码),你会发现有一个加载图像被抓取,尽管它是实际图像。

在我开始抓取之前,如何向页面发送加载图像的请求(因为图像不是使用 XHR 加载的),以便我可以抓取所有图像?

请给我一个有效的工作代码(解决方案),专门针对我的代码。谢谢! :)

最佳答案

如果我查看您的一个 task_url 下的网站源代码,假设 str(i) 计算为 2,我在源代码中看到图像,但是图像本身是不在 img 标签的 src 属性中,而是在 data-src 属性中。

如果我让一个简单的 Spider 去获取图像的 URL。

for i in response.xpath("//a/img[1]"):
print i.xpath("./@data-src").extract()

因此请尝试将您的 XPath 表达式从 src 更改为 data-src 并试一试。更改此行给出了正确(完美)的解决方案-:

item['imageurl'] = str(sel.xpath('div[1]/a//img/@data-src').extract())[3:-2]

关于javascript - Scrapy Scraper 无法正确抓取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31181190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com