文字不可见Python

时间:2016-05-13 16:10:03

标签: python web-scraping scrapy web-crawler

为什么我没有收到文字?我在很多网站上都使用过这个脚本,从来没有遇到过这个问题。

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

我有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

简短回答是:

价格字段值的xpath错误

详细说明:

并不总是假设页面结构与屏幕上显示的内容相同。它并不总是WYSIWYG

由于某种原因,我发现inspect element(firefox)显示价格值为 //a/h4 标记的子项,但如果您要分析下载的页面源,则会看到页面上显示价格值,但不是 //a/h4 标记的子项,但它是 //a 标记的子项,所以 //a/text() 会为您提供所需的值

答案 1 :(得分:0)

看起来价格是从Javascript或其他东西加载的 - 当我从Python下拉页面时,我在任何地方都没有价格。

这里有两个可能的事情:第一,价格可能会加载Javascript。如果是这种情况,我建议您查看以下答案:https://stackoverflow.com/a/26440563/629110和图书馆dryscape

如果由于您的用户代理而阻止了价格,您可以尝试将用户代理更改为真实的浏览器:https://stackoverflow.com/a/10606260/629110

首先尝试用户代理(因为它更容易)。