【问题标题】:How to crawl the url of url in scrapy?如何在scrapy中抓取url的url?
【发布时间】:2017-04-06 03:01:15
【问题描述】:

主网址 = [https://www.amazon.in/s/ref=nb_sb_ss_i_1_8?url=search-alias%3Dcomputers&field-keywords=lenovo+laptop&sprefix=lenovo+m%2Cundefined%2C2740&crid=3L1Q2LMCKALCT]

从主 url 中提取的 url = [http://www.amazon.in/Lenovo-Ideapad-15-6-inch-Integrated-Graphics/dp/B01EN6RA7W?ie=UTF8&keywords=lenovo%20laptop&qid=1479811190&ref_=sr_1_1&s=computers&sr=1-1]

import scrapy
from product.items import ProductItem
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

class amazonSpider(scrapy.Spider):
    name = "amazon"
    allowed_domains = ["amazon.in"]
    start_urls = [ main url here]
    def parse(self, response):
        item=ProductItem()
        for  content in response.xpath("sample xpath"):
            url = content.xpath("a/@href").extract()
            request =    scrapy.Request(str(url[0]),callback=self.page2_parse)
        #url is extracted from my main url
            item['product_Rating'] = request
        yield item
    def page2_parse(self,response):
    #here i dint get the response for the second url content
        for content in response.xpath(sample xpath):
            yield content.xpath(sample xpath).extract()

这里没有执行第二个功能。请帮帮我。

【问题讨论】:

  • 这里 Page2_pase 没有获取第二个 url,我无法进一步抓取
  • 实际上并没有“抓取 url 的 url”;您的第二个网址与第一个网址相同。
  • 嗨,我只在爬取第一个网址后得到了第二个网址。例如在我的主 url 中,我们可以看到多个产品 [笔记本电脑]。因此,在抓取主 url 后,我将获取每个产品的详细信息页面 url。
  • 所以我的要求是,我将在主页 url 中获取所有产品的详细 url,并且应该一一导航到详细页面 url [对于每个产品],然后我获取了一些信息关于产品。

标签: python web-scraping scrapy scrapy-spider


【解决方案1】:

我终于做到了,请按照下面的代码实现从url的url抓取值。

def parse(self, response):
    item=ProductItem()
    url_list = [content for  content in response.xpath("//div[@class='listing']/div/a/@href").extract()]
    item['product_DetailUrl'] = url_list
    for url in url_list:
         request =  Request(str(url),callback=self.page2_parse)
         request.meta['item'] = item
         yield request

def page2_parse(self,response):
    item=ProductItem()
    item = response.meta['item']
    item['product_ColorAvailability'] = [content for content in  response.xpath("//div[@id='templateOption']//ul/li//img/@color").extract()]
    yield item

【讨论】:

    猜你喜欢
    • 2016-07-16
    • 1970-01-01
    • 2022-12-07
    • 2015-11-11
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多