我试图在oneblockdown.it上使用scrapy-spider来获取最新产品的所有产品并将它们存储到数据库中。
我的监视器中的某些站点正在运行,但OBD之类的某些站点无法正常工作,并且没有向数据库上传任何内容。这是我的功能:
class OneBlockDownSpider(Spider):
name = "OneBlockDownSpider"
allowded_domains = ["oneblockdown.it"]
start_urls = [OneBlockDownURL]
def __init__(self):
logging.critical("OneBlockDown STARTED.")
def parse(self, response):
products = Selector(response).xpath("//div[@id='product-list']")
for product in products:
item = OneBlockDownItem()
item['name'] = product.xpath('.//div[@class="catalogue-product-title"]//h3').extract.first
item['link'] = product.xpath('.//div[@class="catalogue-product-title"]//h3/a/@href').extract.first
# # item['image'] = "http:" + product.xpath("/div[@class='catalogue-product-cover']/a[@class='catalogue-product-cover-image']/img/@src").extract()[0]
# item['size'] = '**NOT SUPPORTED YET**'
yield item
yield Request(OneBlockDownURL, callback=self.parse, dont_filter=True, priority=15)
我想我使用了错误的xpath,但我无法解决它
答案 0 :(得分:0)
使用相对选择器(如product:
)时,应该使用'.'
启动所有xpath
item['image'] = "http:" + product.xpath("./div[@class='catalogue-product-cover']/a[@class='catalogue-product-cover-image']/img/@src").extract()[0]
否则,它将尝试使用此xpath获取元素:/body/div[@class='catalogue-product-cover']
答案 1 :(得分:0)
首先该网站受Cloudflare保护(防止抓取)。
您的代码也有几个问题:
products
是单个节点您正在使用extract.first
代替extract_first()
products = response.xpath("//div[@id='product-list']/div")
for product in products:
item = OneBlockDownItem()
item['name'] = product.xpath('.//div[@class="catalogue-product-title"]//h3').extract_first()
item['link'] = product.xpath('.//div[@class="catalogue-product-title"]//h3/a/@href').extract_first()
yield item