Scrapy无法识别xpath

时间:2019-03-18 00:12:12

标签: python xpath web-scraping scrapy

我尝试从此页面https://octopart.com/electronic-parts/integrated-circuits-ics而非“规格”按钮获取数据。我尝试使用此代码获取产品名称,但是它不起作用。

class SpecSpider(scrapy.Spider):
name='specName'

start_urls = ['https://octopart.com/electronic-parts/integrated-circuits-ics']
custom_settings = {
    'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter',
}

def parse(self,response):

    return FormRequest.from_response(response, formxpath="//form[@class='btn-group']", clickdata={"value":"serp-grid"}, callback = self.scrape_pages)

def scrape_pages(self, response):
    #open_in_browser(response)
    items = SpecItem() 

    for product in response.xpath("//div[class='inner-body']/div[class='serp-wrap-all']/table[class='table-valign-middle matrix-table']"):

        name = product.xpath(".//tr/td[class='matrix-col-part']/a[class='nowrap']/text()").extract()            
        items['ProductName']=''.join(name).strip()

        price = product.xpath("//tr/td['4']/div[class='small']/text()").extract()
        items['Price'] = ''.join(price).strip()



        yield items

此xpath response.xpath("//div[class='inner-body']/div[class='serp-wrap-all']/table[class='table-valign-middle matrix-table']")不起作用。

任何建议

2 个答案:

答案 0 :(得分:1)

您使用了错误的XPATH语法!

  

// div [class ='inner-body'] / div [class ='serp-wrap-all'] / table [class ='table-valign-middle   矩阵表']

正确的格式是在“课程”之前添加“ @”

  

// div [@ class ='内部主体'] / div [@ class ='serp-wrap-all'] / ..

上面的链接中没有“矩阵表”表。

尝试使用类似的东西:

  

// div [@ class ='inner-body'] / div [@ class ='serp-wrap-all'] // * [包含(@ class,'matrix-table')]

答案 1 :(得分:0)

如果仅需要顶级产品名称,请使用的CSS选择器

.serp-card-pdp-link

并提取文字

中位数价格来自CSS选择器

.avg-price-faux-btn

您可以使用.css(selector)

轻松应用CSS。