为什么我没有收到文字?我在很多网站上都使用过这个脚本,从来没有遇到过这个问题。
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
网站代码:
运行脚本后的结果:
我有什么建议可以解决这个问题吗?
答案 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。
首先尝试用户代理(因为它更容易)。