2016-05-13 23 views
1

爲什麼我沒有收到文字?我在很多網站上使用過這個腳本,從來沒有遇到過這個問題。文字不可見Python

import scrapy.selector 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 
from Prijsvergelijking_Final.items import PrijsvergelijkingFinalItem 

vendors = [] 
for line in open("vendors.txt", "r"): 
    vendors.append(line.strip("\n\-")) 
e = {} 
for vendor in vendors: 
    e[vendor] = True 

class ArtcrafttvSpider(CrawlSpider): 
    name = "ARTCRAFTTV" 
    allowed_domains = ["artencraft.be"] 
    start_urls = ["https://www.artencraft.be/nl/beeld-en-geluid/televisie"] 
    rules = (Rule(LinkExtractor(allow=(), restrict_xpaths=('//li[@class="next"]',)), callback = "parse_start_url",follow = True),)  
    def parse_start_url(self, response): 
     products = response.xpath("//ul[@class='product-overview list']/li") 
     for product in products: 
      item = PrijsvergelijkingFinalItem() 
      item["Product_a"] = product.xpath(".//a/span/h3/text()").extract_first().strip().replace("-","") 
      item["Product_price"] = product.xpath(".//a/h4/text()").extract_first() 
      for word in item['Product_a'].split(" "): 
       if word in e: 
        item['item_vendor'] = word    
      yield item 

網站代碼:

HTML

結果腳本運行後:

Results

任何建議,我怎麼能解決這個問題?

+0

你談論的價格是多少? – Tony

+0

是的,我會談價格 – Wouter

+0

@Wouter:嘗試一個不同的XPath價格,比如'.// a/h4 /(/ text())[last()]' – Blender

回答

1

簡短的答案是:

你有一個錯誤的XPath價格字段值

詳細:如什麼是顯示在

不要總是以爲頁面結構將是相同的屏幕。它是並不總是所見即所得

由於某種原因,我看到inspect element(火狐)顯示的價格值作爲//a/h4標籤的孩子,但如果你將分析所下載的網頁源代碼,你會看到,價格超值存在網頁上,但它是沒有//a/h4標籤的孩子,但它是//a標籤的孩子這麼//a/text()會給你想要的值

0

似乎價格是從Javascript或什麼東西加載 - 當我從Python下拉頁面時,我沒有任何價格。

有兩種可能的情況發生在這裏:首先,可能會使用Javascript加載價格。如果是這樣的話,我建議看看這個答案:https://stackoverflow.com/a/26440563/629110和庫dryscape

如果由於您的用戶代理而導致價格被阻止,您可以嘗試將您的用戶代理更改爲真實瀏覽器:https://stackoverflow.com/a/10606260/629110

先嚐試用戶代理(因爲它更容易)。