文本不可见 Python
Text not visible 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
网站代码:
脚本后的结果是 运行:
有什么解决办法的建议吗?
价格似乎是从 Javascript 或其他地方加载的 - 当我从 Python 下拉页面时,我在任何地方都看不到价格。
这里可能发生两种情况:首先,价格可能会随着 Javascript 加载。如果是这种情况,我建议查看此答案: and the library dryscape。
如果价格因为您的用户代理而被屏蔽,您可以尝试将您的用户代理更改为真正的浏览器: .
首先尝试用户代理(因为它更容易)。
简短的回答是:
价格字段值的 xpath 错误
详细:
不要总是假设页面结构与屏幕上显示的相同。 并不总是所见即所得
出于某种原因,我看到 inspect element
(firefox) 将价格值显示为 //a/h4
标签的子标签,但如果您要分析页面源代码下载后,您会看到价格值出现在页面上,但它不是 //a/h4
标签的子标签,而是 [=13 标签的子标签=] 标签所以 //a/text()
会给你想要的值
为什么我收不到短信?我在很多网站上使用过这个脚本,但从未遇到过这个问题。
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
网站代码:
脚本后的结果是 运行:
有什么解决办法的建议吗?
价格似乎是从 Javascript 或其他地方加载的 - 当我从 Python 下拉页面时,我在任何地方都看不到价格。
这里可能发生两种情况:首先,价格可能会随着 Javascript 加载。如果是这种情况,我建议查看此答案: and the library dryscape。
如果价格因为您的用户代理而被屏蔽,您可以尝试将您的用户代理更改为真正的浏览器: .
首先尝试用户代理(因为它更容易)。
简短的回答是:
价格字段值的 xpath 错误
详细:
不要总是假设页面结构与屏幕上显示的相同。 并不总是所见即所得
出于某种原因,我看到 inspect element
(firefox) 将价格值显示为 //a/h4
标签的子标签,但如果您要分析页面源代码下载后,您会看到价格值出现在页面上,但它不是 //a/h4
标签的子标签,而是 [=13 标签的子标签=] 标签所以 //a/text()
会给你想要的值